অন্যান্য উত্তরের টুকরো একত্রিত করার পরে আমি এটি কাজ করেছিলাম! সুতরাং আপনারা যারা এর সাথেও লড়াই করছেন তাদের সমাধান এখানে:
এই পোস্টটি এবং এই একটি আমাকে কিছুটা সাহায্য করেছে, তাই এই ছেলেদের জন্য ধন্যবাদ।
দ্রষ্টব্য, এই সমস্ত কোড, এবং আপনার প্রাথমিক কাস্টম পোস্টের ধরণ এবং বিভাগের রেজিস্ট্রেশন কোডটি আপনার functions.php
ফাইলে যায় ।
আপনার কাস্টম পোস্টের ধরণ এবং করশোনাগুলি সংজ্ঞায়িত করার সময় প্রথমে আপনার স্লাগগুলি ঠিক পান: কাস্টম পোস্টের ধরণের জন্য এটি হওয়া উচিত basename/%taxonomy_name%
এবং আপনার শ্রেণিবিন্যাসের স্লাগটি ন্যায়সঙ্গত হওয়া উচিত basename
। 'hierarchical' => true
আপনার ইউআরএলে নেস্টেড শর্তাদি পাওয়ার জন্য বিভাগের পুনর্লিখনের অ্যারেতে যুক্ত করতে ভুলবেন না । উভয় ক্ষেত্রেই query_var
সেট করা true
আছে তা নিশ্চিত করুন ।
আপনাকে একটি নতুন পুনর্লিখনের নিয়ম যুক্ত করতে হবে যাতে ওয়ার্ডপ্রেস কীভাবে আপনার ইউআরএল কাঠামোর ব্যাখ্যা করতে পারে knows আমার ক্ষেত্রে ইউরির কাস্টম পোস্ট টাইপ অংশটি সর্বদা 5 তম ইউরি বিভাগ হবে, সুতরাং আমি সেই অনুযায়ী আমার ম্যাচের নিয়মটি সংজ্ঞায়িত করেছি। নোট করুন যে আপনি আরও বা কম ইউরি বিভাগগুলি ব্যবহার করেন তবে আপনাকে এটি পরিবর্তন করতে হতে পারে। যদি আপনার নেস্টেড পদগুলির বিবিধ মাত্রা থাকে তবে শেষের ইউরি বিভাগটি কাস্টম পোস্টের ধরণ কিনা বা কোন বিধান যুক্ত করতে হবে তা জানতে একটি ট্যাক্সনোমির শব্দ কিনা তা পরীক্ষা করার জন্য আপনাকে একটি ফাংশন লিখতে হবে (যদি আপনাকে সাহায্যের প্রয়োজন হয় কিনা আমাকে জিজ্ঞাসা করুন) যে)।
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
আমার প্রশ্নে আমি যেভাবে উল্লেখ করেছি সেভাবেই সবকিছুই কাজ করা উচিত। সাইডবারে আপনার নেস্টেড বিভাগগুলি দেখানোর জন্য তারা দেখতে কেমন নিয়ন্ত্রণ করতে এবং কিছু ধরণের টেকনোমির উইজেট প্লাগইন যুক্ত করতে কিছু কাস্টম ট্যাক্সনমি সংরক্ষণাগার তৈরি করতে চাইতে পারেন ।
আশা করি আপনাকে সাহায্য করবে!