अन्य उत्तरों के टुकड़ों का एक संयोजन करने के बाद मैंने इसे काम कर लिया! तो यहाँ उन लोगों के लिए एक समाधान है जो इससे भी जूझ रहे हैं:
इस पोस्ट और इस एक कुछ मेरी मदद की, तो उन लोगों के लिए धन्यवाद।
ध्यान दें, यह सभी कोड, आपके प्रारंभिक कस्टम पोस्ट प्रकार और टैक्सोनॉमी पंजीकरण कोड आपकी functions.php
फ़ाइल में जाता है ।
अपने कस्टम पोस्ट प्रकारों और टैक्सोनॉमीज़ को परिभाषित करते समय सबसे पहले अपने स्लग प्राप्त करें: कस्टम पोस्ट प्रकार के लिए यह होना चाहिए basename/%taxonomy_name%
और आपकी टैक्सोनॉमी के लिए स्लग बस होना चाहिए basename
। 'hierarchical' => true
अपने url में नेस्टेड शब्द प्राप्त करने के लिए टैक्सोनॉमी रीराइट एरे को भी जोड़ना न भूलें । यह भी सुनिश्चित करें कि दोनों मामलों में query_var
सेट है true
।
आपको एक नया पुनर्लेखन नियम जोड़ने की आवश्यकता है ताकि वर्डप्रेस को पता चले कि आपकी यूआरएल संरचना की व्याख्या कैसे की जाए। मेरे मामले में uri का कस्टम पोस्ट प्रकार भाग हमेशा 5 वां uri खंड होगा, इसलिए मैंने अपने मैच नियम को उसी के अनुसार परिभाषित किया। ध्यान दें कि यदि आपको अधिक या कम uri खंडों का उपयोग करना है, तो आपको इसे बदलना पड़ सकता है। यदि आपके पास नेस्टेड शर्तों के स्तर अलग-अलग हैं, तो आपको यह जांचने के लिए एक फ़ंक्शन लिखना होगा कि क्या अंतिम uri खंड एक कस्टम पोस्ट प्रकार है या यह जानने के लिए कौन सा नियम है (मुझसे पूछें कि क्या आपको मदद चाहिए? उस)।
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);
}
फिर आपको इस कोड को जोड़ने की जरूरत है कि वर्कप्रेस को %taxonomy_name%
अपने कस्टम पोस्ट टाइप हैंडल करने के लिए स्लग स्ट्रक्चर को कैसे लिखें:
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);
मैंने वर्डप्रेस के आधार पर एक कस्टम फंक्शन बनाया 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;
}
फिर आपको अपने पर्मलिंक को फ्लश करने की जरूरत है (बस अपने पर्मलिंक सेटिंग्स पेज को लोड करें)।
अब सब कुछ 'काम' उम्मीद से करना चाहिए! जाओ वर्गीकरण की शर्तों का एक गुच्छा बनाएं और उन्हें सही ढंग से घोंसले में रखें, फिर कुछ कस्टम पोस्ट प्रकार के पोस्ट बनाएं और उन्हें सही तरीके से वर्गीकृत करें। आप स्लग के साथ एक पेज भी बना सकते हैं basename
, और सब कुछ मेरे प्रश्न में निर्दिष्ट तरीके से काम करना चाहिए। आप यह देखने के लिए कि वे कैसे दिखते हैं और साइडबार में अपनी नेस्टेड श्रेणियों को दिखाने के लिए कुछ प्रकार के टैक्सोनॉमी विजेट प्लगइन जोड़ सकते हैं, को नियंत्रित करने के लिए कुछ कस्टम टैक्सोनॉमी आर्काइव पेज बनाना चाहते हैं ।
आशा है कि आपकी मदद करता है!