Meskipun bukan struktur URL yang diinginkan, Anda bisa mendapatkan:
/ produk
»Lihat semua posting khusus
/ produk / tipe / ponsel
»Lihat semua posting kustom dengan ponsel taksonomi
/ products / type / cell-phone / brand / samsung
»Lihat semua posting kustom di mana taksonomi adalah ponsel DAN samsung
/ brand / samsung
»Lihat semua posting khusus tempat taksonominya adalah samsung
/ produk / test-product-1
»Lihat produk (pos khusus tunggal)
tanpa harus menentukan aturan penulisan ulang kustom.
Itu memang mengharuskan Anda mendaftarkan taksonomi dan jenis pos kustom dalam urutan tertentu. Caranya adalah dengan mendaftarkan taksonomi apa pun di mana siput dimulai dengan siput tipe-posting Anda sebelum Anda mendaftarkan tipe posting khusus itu. Misalnya, asumsikan siput berikut:
product_type taxonomy slug = products/type
product custom_post_type slug = product
product custom_post_type archive slug = products
product_brand taxonomy slug = brand
Kemudian Anda bisa mendaftarkannya dalam urutan ini:
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,
)
);
Jika Anda benar-benar harus memiliki URL seperti:
/ produk / tipe / telepon seluler / merek / samsung / test-product-1
»Lihat produk (pos khusus tunggal)
Maka Anda akan membutuhkan aturan penulisan ulang sesuatu seperti ini:
add_rewrite_rule(
'/products/type/*/brand/*/([^/]+)/?',
'index.php?pagename='product/$matches[1]',
'top' );
UPDATE
/programming/3861291/multiple-custom-permalink-structures-in-wordpress
Inilah cara Anda mendefinisikan ulang URL satu posting dengan benar.
Setel tulis ulang menjadi false untuk jenis posting khusus. (Biarkan arsip apa adanya) dan kemudian setelah mendaftarkan taksonomi dan posting, daftarkan juga aturan penulisan ulang berikut.
'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);
Kemudian filter post_type_link untuk membuat struktur URL yang diinginkan - memungkinkan untuk nilai taksonomi yang tidak disetel. Mengubah kode dari pos tertaut, Anda harus:
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);
Sekarang saya hanya perlu mencari cara untuk menulis ulang url taksonomi merek tanpa label merek terkemuka, dan saya harus mencocokkan URL yang Anda inginkan dengan tepat.