Embora não seja sua estrutura exata de URL desejada, você pode obter:
/ produtos
»Ver todas as postagens personalizadas
/ products / type / cell-phones
»Veja todas as postagens personalizadas com os celulares de taxonomia
/ products / type / telefones celulares / marca / samsung
»Veja todas as postagens personalizadas nas quais a taxonomia é telefones celulares E samsung
/ brand / samsung
»Veja todas as postagens personalizadas nas quais a taxonomia é samsung
/ product / test-product-1
»Visualizar o produto (postagem personalizada única)
sem precisar especificar regras personalizadas de reescrita.
No entanto, é necessário registrar suas taxonomias e tipos de postagem personalizados em uma ordem específica. O truque é registrar qualquer taxonomia em que a lesma comece com a lesma do seu tipo de postagem antes de registrar esse tipo de postagem personalizado. Por exemplo, assuma as seguintes lesmas:
product_type taxonomy slug = products/type
product custom_post_type slug = product
product custom_post_type archive slug = products
product_brand taxonomy slug = brand
Então você pode registrá-los nesta ordem:
register_taxonomy(
'products_type',
'products',
array(
'label' => 'Product Type',
'labels' => $product_type_labels,
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'args' => array( 'orderby' => 'term_order' ),
'rewrite' => array( 'slug' => 'products/type', 'with_front' => false ),
'has_archive' => true,
'query_var' => true,
)
);
register_post_type('products', array(
'labels' =>$products_labels,
'singular_label' => __('Product'),
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => 'product', 'with_front' => false ),
'has_archive' => 'products',
'supports' => array('title', 'editor', 'thumbnail', 'revisions','comments','excerpt'),
));
register_taxonomy(
'products_brand',
'products',
array(
'label' => 'Brand',
'labels' => $products_brand_labels,
'public' => true,
'show_ui' => true,
'show_in_nav_menus' => true,
'args' => array( 'orderby' => 'term_order' ),
'rewrite' => array( 'slug' => 'brand', 'with_front' => false ),
'has_archive' => true,
'query_var' => true,
)
);
Se você absolutamente precisa ter um URL como:
/ products / tipo / telefones celulares / marca / samsung / test-product-1
»Veja o produto (postagem personalizada única)
Então você exigiria uma regra de reescrita mais ou menos assim:
add_rewrite_rule(
'/products/type/*/brand/*/([^/]+)/?',
'index.php?pagename='product/$matches[1]',
'top' );
UPDATE
/programming/3861291/multiple-custom-permalink-structures-in-wordpress
Veja como redefinir corretamente o URL de postagem única.
Defina a reescrita como false para o tipo de postagem personalizada. (Deixe o arquivo como está) e, depois de registrar as taxonomias e postagens, também registre as seguintes regras de reescrita.
'rewrite' => false
global $wp_rewrite;
$product_structure = '/%product_type%/%brand%/%product%';
$wp_rewrite->add_rewrite_tag("%product%", '([^/]+)', "product=");
$wp_rewrite->add_permastruct('product', $product_structure, false);
Em seguida, filtre post_type_link para criar a estrutura de URL desejada - permitindo valores de taxonomia não definidos. Alterando o código da postagem vinculada, você teria:
function product_permalink($permalink, $post_id, $leavename){
$post = get_post($post_id);
if( 'product' != $post->post_type )
return $permalink;
$rewritecode = array(
'%product_type%',
'%brand%',
$leavename? '' : '%postname%',
$leavename? '' : '%pagename%',
);
if('' != $permalink && !in_array($post->post_status, array('draft', 'pending', 'auto-draft'))){
if (strpos($permalink, '%product_type%') !== FALSE){
$terms = wp_get_object_terms($post->ID, 'product_type');
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
$product_type = $terms[0]->slug;
else
$product_type = 'unassigned-artist';
}
if (strpos($permalink, '%brand%') !== FALSE){
$terms = wp_get_object_terms($post->ID, 'brand');
if (!is_wp_error($terms) && !empty($terms) && is_object($terms[0]))
$brand = $terms[0]->slug;
else
$brand = 'unassigned-brand';
}
$rewritereplace = array(
$product_type,
$brand,
$post->post_name,
$post->post_name,
);
$permalink = str_replace($rewritecode, $rewritereplace, $permalink);
}
return $permalink;
}
add_filter('post_type_link', 'product_permalink', 10, 3);
Agora, só preciso descobrir como reescrever o URL da taxonomia da marca sem a tag da marca líder e devo corresponder exatamente ao URL desejado.