Bir sürü başka cevabı birleştirdikten sonra, çalışmasını sağladım! İşte burada da bununla mücadele edenlerin çözümü:
Bu yazı ve bu bana biraz yardımcı oldu, bu yüzden bu adamlar için teşekkürler.
Tüm bu kodlara ek olarak, ilk özel posta türünüzü ve taksonomi kayıt kodunu da functions.php
dosyanızda bulunduğunu unutmayın .
Özel gönderi tiplerinizi ve taksonomilerinizi tanımlarken ilk önce sümüklü böceklerinizi doğru alın: özel gönderi tipi için olması gerektiği gibi, basename/%taxonomy_name%
ve taksonominiz için sümüklü böcek sadece olmalıdır basename
. 'hierarchical' => true
URL’nize yerleştirilmiş terimler almak için taksonomiyi yeniden yazma dizisine eklemeyi de unutmayın . Ayrıca her iki durumda query_var
da ayarlandığından emin olun true
.
Yeni bir yeniden yazma kuralı eklemeniz gerekir, böylece WordPress URL yapınızı nasıl yorumlayacağınızı bilir. Benim durumumda uri'nin özel yazı tipi kısmı her zaman 5. uri segmenti olacak, bu yüzden maç kuralımı buna göre tanımladım. Daha fazla veya daha az uri segmenti kullanıyorsanız, bunu değiştirmeniz gerekebileceğini unutmayın. Farklı düzeylerde iç içe geçmiş terimleriniz varsa, son uri segmentinin özel bir yazı türü olup olmadığını veya hangi kuralı ekleyeceğini bilmek için bir taksonomi terimi olup olmadığını kontrol etmek için bir işlev yazmanız gerekir (yardıma ihtiyacınız olup olmadığını sorun ) o.
add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules) {
$newRules = array();
$newRules['basename/(.+)/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type_name=$matches[4]'; // my custom structure will always have the post name as the 5th uri segment
$newRules['basename/(.+)/?$'] = 'index.php?taxonomy_name=$matches[1]';
return array_merge($newRules, $rules);
}
Daha sonra, işlenecek yazının %taxonomy_name%
özel yazı tipini yeniden yazma sümüklüböcek yapınızda nasıl kullanılacağına izin vermek için bu kodu eklemeniz gerekir :
function filter_post_type_link($link, $post)
{
if ($post->post_type != 'custom_post_type_name')
return $link;
if ($cats = get_the_terms($post->ID, 'taxonomy_name'))
{
$link = str_replace('%taxonomy_name%', get_taxonomy_parents(array_pop($cats)->term_id, 'taxonomy_name', false, '/', true), $link); // see custom function defined below
}
return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);
Wordpress'in kendisine göre özel bir fonksiyon oluşturdum get_category_parents
:
// my own function to do what get_category_parents does for other taxonomies
function get_taxonomy_parents($id, $taxonomy, $link = false, $separator = '/', $nicename = false, $visited = array()) {
$chain = '';
$parent = &get_term($id, $taxonomy);
if (is_wp_error($parent)) {
return $parent;
}
if ($nicename)
$name = $parent -> slug;
else
$name = $parent -> name;
if ($parent -> parent && ($parent -> parent != $parent -> term_id) && !in_array($parent -> parent, $visited)) {
$visited[] = $parent -> parent;
$chain .= get_taxonomy_parents($parent -> parent, $taxonomy, $link, $separator, $nicename, $visited);
}
if ($link) {
// nothing, can't get this working :(
} else
$chain .= $name . $separator;
return $chain;
}
O zaman kalıcı bağlantılarınızı temizlemeniz gerekir (yalnızca kalıcı bağlantı ayarları sayfanızı yükleyin).
Şimdi her şey umarım işe yaramalı! Bir takım taksonomi terimleri yapın ve bunları doğru şekilde yerleştirin, ardından bazı özel yazı tipi yayınları yapın ve bunları doğru şekilde sınıflandırın. Ayrıca sümüklü böcek içeren bir sayfa da yapabilirsiniz basename
ve her şey benim sorumla belirttiğim gibi çalışmalı. Nasıl göründüklerini kontrol etmek ve iç içe kategorilerinizi kenar çubuğunda göstermek için bir tür taksonomi widget eklentisi eklemek için bazı özel taksonomi arşiv sayfaları oluşturmak isteyebilirsiniz .
Umarım bu yardımcı olur!