Obwohl dies nicht Ihre genau gewünschte URL-Struktur ist, können Sie Folgendes erhalten:
/ products
»Alle benutzerdefinierten Beiträge anzeigen
/ products / type / handys
»Alle benutzerdefinierten Beiträge mit den Taxonomie-Handys anzeigen
/ products / type / handys / brand / samsung
»Alle benutzerdefinierten Beiträge anzeigen , in denen die Taxonomie Handys UND Samsung lautet
/ brand / samsung
»Alle benutzerdefinierten Beiträge anzeigen, in denen die Taxonomie Samsung ist
/ product / test-product-1
»Produkt anzeigen (einzelner benutzerdefinierter Beitrag)
ohne benutzerdefinierte Regeln zum erneuten Schreiben angeben zu müssen.
Es ist jedoch erforderlich, dass Sie Ihre Taxonomien und benutzerdefinierten Beitragstypen in einer bestimmten Reihenfolge registrieren. Der Trick besteht darin, jede Taxonomie zu registrieren, bei der der Slug mit dem Slug Ihres Post-Typs beginnt, bevor Sie diesen benutzerdefinierten Post-Typ registrieren. Nehmen Sie zum Beispiel die folgenden Schnecken an:
product_type taxonomy slug = products/type
product custom_post_type slug = product
product custom_post_type archive slug = products
product_brand taxonomy slug = brand
Dann könnten Sie sie in dieser Reihenfolge registrieren:
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,
)
);
Wenn Sie unbedingt eine URL haben müssen wie:
/ products / type / handys / brand / samsung / test-product-1
»Produkt anzeigen (einzelner benutzerdefinierter Beitrag)
Dann würden Sie eine Umschreiberegel wie diese benötigen:
add_rewrite_rule(
'/products/type/*/brand/*/([^/]+)/?',
'index.php?pagename='product/$matches[1]',
'top' );
UPDATE
/programming/3861291/multiple-custom-permalink-structures-in-wordpress
So definieren Sie die URL für einen einzelnen Beitrag korrekt neu.
Setzen Sie das erneute Schreiben für den benutzerdefinierten Beitragstyp auf false. (Lassen Sie das Archiv unverändert) und registrieren Sie nach dem Registrieren der Taxonomien und Beiträge auch die folgenden Umschreiberegeln.
'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);
Filtern Sie anschließend post_type_link, um die gewünschte URL-Struktur zu erstellen. Dabei werden nicht festgelegte Taxonomiewerte berücksichtigt. Wenn Sie den Code aus dem verlinkten Beitrag ändern, haben Sie:
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);
Jetzt muss ich nur noch herausfinden, wie die URL der Markentaxonomie ohne das führende Markentag neu geschrieben werden kann, und ich sollte genau mit Ihrer gewünschten URL übereinstimmen.