Atualmente, tenho dois tipos de postagens, "produtos" e "produtos-dados", são tipos de post separados; no entanto, para todos os efeitos, product-data é um post filho de produtos. A relação é estabelecida por meio de um elemento meta para produtos-dados "pai" que terá um ID de postagem da postagem de produtos.
As postagens "produtos-dados" são criadas apenas de uma forma: um usuário clica em um produto no tipo de postagem de produtos e insere dados em uma janela pop-up. Isso usa wp_insert_post para criar uma postagem de dados de produtos e adiciona um elemento-meta "pai" com o valor da ID da postagem de "produtos". Esses dados são exibidos por meio de uma janela modal se um usuário clicar no tipo de produto.
Estou tentando ter seus permalinks da seguinte forma:
Link permanente do esquema para uma postagem "produtos" (para este exemplo, o ID dessa postagem é 123):
enlace
Permalink schema para uma postagem "products-data" que possui uma meta key / value de parent = > 123
enlace
Aqui está o código que estou usando para registrar o tipo de postagem e criar regras de reconfiguração; no entanto, depois de adicionar este código e liberar minhas regras de reconfiguração (configurações > permalink) ele funciona bem para um tipo de pós-produto "produtos" MAS quando tento acessar uma postagem "produtos" ele exibe a página inicial do site WordPress (NB this não é via redirecionamento, a barra de URL exibe o URL "produtos").
Eu estou querendo saber se a questão é que os dois permastructs aparecem que eles podem colidir uns com os outros, no entanto, nunca haverá uma instância disso na prática devido ao esquema de permastructs.
Qualquer ajuda seria muito apreciada sobre como resolver isso.
Código:
add_action ( 'init', 'register_product_post_types' );
add_action ( 'init', 'products_add_rewrite_rules' );
add_filter ( 'post_type_link', 'products_permalinks', 10, 3 );
function register_product_post_types() {
register_post_type( 'products',
array(
'supports' => array( 'title', 'editor', 'author',"custom-fields", "thumbnail", "excerpt", 'comments' ),
'labels' => array(
'name' => __( 'Products' ),
'singular_name' => __( 'Products' )
),
'public' => true,
'has_archive' => false,
'rewrite' => FALSE,
)
);
register_post_type( 'products-data',
array(
'supports' => array( 'title', 'editor', 'author',"custom-fields" ),
'labels' => array(
'name' => __( 'Products-Data' ),
'singular_name' => __( 'Products-Data' )
),
'show_in_menu' =>'edit.php?post_type=products',
'public' => true,
'has_archive' => false,
'rewrite' => FALSE,
)
);
}
function products_add_rewrite_rules() {
global $wp_rewrite;
$wp_rewrite->add_rewrite_tag('%products%', '([^/]+)', 'products=');
$wp_rewrite->add_rewrite_tag('%products-data%', '([^/]+)', 'products-data=');
$wp_rewrite->add_rewrite_tag('%parent%', '([^/]+)', 'parent=');
$wp_rewrite->add_permastruct('products-data', '/products/%parent%/%products-data%', false);
}
function products_permalinks($permalink, $post, $leavename) {
$no_data = 'no-data';
$post_id = $post->ID;
if($post->post_type != 'products-data' || empty($permalink) || in_array($post->post_status, array('draft', 'pending', 'auto-draft')))
return $permalink;
$data = sanitize_title(get_the_title(get_post_meta($post_id, 'parent', true)));
if(!$data) $data = $no_data;
$permalink = str_replace('%parent%', $data, $permalink);
return $permalink;
}