Pur non essendo l'esatta struttura dell'URL desiderata, puoi ottenere:
/ prodotti
»Visualizza tutti i post personalizzati
/ products / type / cell -phones
»Visualizza tutti i post personalizzati con i telefoni cellulari di tassonomia
/ prodotti / tipo / telefoni cellulari / marchio / samsung
»Visualizza tutti i messaggi personalizzati in cui la tassonomia è telefoni cellulari E Samsung
/ brand / samsung
»Visualizza tutti i post personalizzati in cui la tassonomia è Samsung
/ product / test-product-1
»Visualizza il prodotto (singolo post personalizzato)
senza dover specificare regole di riscrittura personalizzate.
Tuttavia, richiede la registrazione delle tassonomie e dei tipi di posta personalizzati in un ordine particolare. Il trucco è registrare qualsiasi tassonomia in cui la lumaca inizia con la lumaca del tuo tipo di post prima di registrare quel tipo di post personalizzato. Ad esempio, supponiamo che le seguenti lumache:
product_type taxonomy slug = products/type
product custom_post_type slug = product
product custom_post_type archive slug = products
product_brand taxonomy slug = brand
Quindi è possibile registrarli in questo ordine:
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 devi assolutamente avere un URL come:
/ products / type / cell -phones / brand / samsung / test-product-1
»Visualizza il prodotto (singolo post personalizzato)
Quindi avresti bisogno di una regola di riscrittura simile a questa:
add_rewrite_rule(
'/products/type/*/brand/*/([^/]+)/?',
'index.php?pagename='product/$matches[1]',
'top' );
AGGIORNAMENTO
/programming/3861291/multiple-custom-permalink-structures-in-wordpress
Ecco come ridefinire correttamente l'URL del singolo post.
Imposta la riscrittura su false per il tipo di post personalizzato. (Lascia l'archivio così com'è) e dopo aver registrato le tassonomie e i post, registra anche le seguenti regole di riscrittura.
'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);
Quindi filtra post_type_link per creare la struttura URL desiderata, consentendo valori di tassonomia non impostati. Modificando il codice dal post collegato, avresti:
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);
Ora devo solo capire come riscrivere l'URL della tassonomia del marchio senza il tag del marchio principale e dovrei corrispondere esattamente all'URL desiderato.