বেস-নাম / প্যারেন্ট-ট্যাক্স / শিশু-কর / কাস্টম-পোস্ট-টাইপ-নামের মতো কাস্টম ট্যাক্সোনমি এবং কাস্টম পোস্ট ধরণের সাথে কীভাবে পারমলিংক কাঠামো তৈরি করতে হয়


53

আমি উত্তরের জন্য এই সাইট এবং গুগলকে কম্বিং করছি এবং আমি সম্পূর্ণ খালি এসেছি। মূলত আমি এই পোস্টটি যা চাইবে ঠিক তাই করতে চাই , তবে আমার একটি শ্রেণিবিন্যাসের শ্রমশক্তি দরকার। এই পোস্টে দেওয়া উত্তরটি দুর্দান্ত কাজ করে তবে কেবলমাত্র একটি একক স্তরের শৈলীযুক্ত। আমি যা চাই তা কি সম্ভব? আমি এক মিলিয়ন জিনিস চেষ্টা করেছি, কিন্তু কিছুই কার্যকর হয়নি, সর্বোপরি আমি সঠিক পারমিলিক্স পেতে পারি তবে সেগুলি 404 এ আসে।

আমি যা চাই তা দৃশ্যত চিত্রিত করতে:

/basename/ - ideally a page, but I think this will cause a permalink collision    
/basename/top-cat/ - top parent custom taxonomy archive    
/basename/top-cat/child-cat/ - child cat custom taxonomy archive     
/basename/top-cat/child-cat/grandchild-cat/ - grandchild cat custom taxonomy archive    
/basename/top-cat/child-cat/grandchild-cat/post-name/ - my custom post type post

পোস্ট এবং বিভাগগুলিতে অন্তর্নির্মিতগুলির সাথে আপনি এই সূক্ষ্ম কাজটি করতে পারেন, কাস্টম ট্যাক্সোনমি এবং কাস্টম পোস্ট প্রকারের মাধ্যমে আপনি এটি কীভাবে করেন? আমি জানি তুমি ব্যবহার করতে হবে 'rewrite' => array( 'slug' => 'tax-name', 'with_front' => true, 'hierarchical' => true ),হায়ারারকিকাল বর্জ্য বুকে, যা সংরক্ষণাগার পাতায় কাজ করে জরিমানা পেতে, কিন্তু কাস্টম পোস্ট টাইপ পোস্ট 404. আসা পর্যন্ত যদি আমি অপসারণ 'hierarchical' => trueঅংশ তারপর পোস্ট কাজ করে, কিন্তু আমি হায়ারারকিকাল URL গুলি হারান (শুধুমাত্র / basename / নাতি-বিড়াল / পোস্ট-নাম / কাজগুলি)।

সুতরাং, কোন সমাধান? আপনাকে অনেক ধন্যবাদ, এটি প্রায় 3 সপ্তাহ ধরে আমাকে বাদাম চালাচ্ছে।

উত্তর:


68

অন্যান্য উত্তরের টুকরো একত্রিত করার পরে আমি এটি কাজ করেছিলাম! সুতরাং আপনারা যারা এর সাথেও লড়াই করছেন তাদের সমাধান এখানে:

এই পোস্টটি এবং এই একটি আমাকে কিছুটা সাহায্য করেছে, তাই এই ছেলেদের জন্য ধন্যবাদ।

দ্রষ্টব্য, এই সমস্ত কোড, এবং আপনার প্রাথমিক কাস্টম পোস্টের ধরণ এবং বিভাগের রেজিস্ট্রেশন কোডটি আপনার 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আমার প্রশ্নে আমি যেভাবে উল্লেখ করেছি সেভাবেই সবকিছুই কাজ করা উচিত। সাইডবারে আপনার নেস্টেড বিভাগগুলি দেখানোর জন্য তারা দেখতে কেমন নিয়ন্ত্রণ করতে এবং কিছু ধরণের টেকনোমির উইজেট প্লাগইন যুক্ত করতে কিছু কাস্টম ট্যাক্সনমি সংরক্ষণাগার তৈরি করতে চাইতে পারেন ।

আশা করি আপনাকে সাহায্য করবে!


স্থির- দেখুন প্রশ্ন। জেফ, আপনার ব্যাখ্যার জন্য ধন্যবাদ! তবে কাস্টম পোস্ট টাইপ / টেকনোমি বিল্ডটি পোস্ট করা কি আপনার পক্ষে সম্ভব? সুতরাং আমি দেখতে পাচ্ছি যে আমি কী ভুল করছি ? সত্যিকারের ধন্যবাদ হবে!
বোস

আরে জেফ, তোমার উত্তরের জন্য ধন্যবাদ! আমি প্রায় সেখানে আছি, এর সাথে 4 ঘন্টা লড়াই করার পরে। আমার একমাত্র সমস্যাটি হ'ল আমি পোস্টের নামের আগে একটি ডাবল স্ল্যাশ পেয়েছি (এটি হিসাবে: পোর্টফোলিও / ডিজনো-গ্রাফিকো -২ / লোগো // আলকুইমিয়া-সোনোরা /) আপনি কি আমাকে সাহায্য করতে পারেন?
সিএমরোলস

1
@ কমোরেলস, আপনার কোডটি না দেখে নিশ্চিত নন, তবে এমন কোনও জায়গার সন্ধান করুন যেখানে আপনি নিজের পোস্টের নামের আগে ম্যানুয়ালি স্ল্যাশ সংজ্ঞায়িত করেছেন, যেমন সিটিপি স্লাগ রেজিস্ট্রেশন বা ফিল্টার_পোস্ট_প্রকার ফাংশনে? আপনি যদি অতিরিক্ত স্ল্যাশ যুক্ত করছেন তা যদি আপনি সন্ধান করতে না পারেন তবে আপনি ফিল্টার_পোস্ট_টাইপ_লিংক নামক get_taxonomy_parents ফাংশনটির ফিরে আসা মান থেকে শেষ চরিত্রটি সরিয়ে ফেলতে পারেন, কারণ এটি আপনাকে একটি পিছনের স্ল্যাশ দিয়ে ছেড়ে যাবে, যা প্রথমটি দ্বিগুন. শুভকামনা।
জেফ

1
"যদি আপনার নেস্টেড পদগুলির বিবিধ মাত্রা থাকে তবে শেষ ইউরি বিভাগটি কাস্টম পোস্টের ধরণ কিনা বা কোন বিধান যুক্ত করতে হবে তা জানতে কোনও শৈল্পিক পদ আছে কিনা তা যাচাই করার জন্য আপনাকে একটি ফাংশন লিখতে হবে (আপনার সাহায্যের প্রয়োজন হলে আমাকে জিজ্ঞাসা করুন) তাতে) ... "আচ্ছা, আপনি কি আমাকে সাহায্য করতে পারেন, দয়া করে? :)
Cmorales

2
^ এটাই আমার দরকার ছিল। কেউ কিভাবে এটা করতে জানেন? আমার প্রশ্নটি এখানে দেখুন: ওয়ার্ডপ্রেস.স্ট্যাকেক্সচেঞ্জ
প্রশ্নগুলি ১০০২২৪6/২

2

এই প্লাগইনটি একবার দেখুন । এটি বিভাগগুলির জন্য শ্রেণিবিন্যাসের ইউআরএল সরবরাহ করে তবে আপনি যে কোনও শৈলীতে সহজেই মানিয়ে নিতে পারেন।

নিয়ম তৈরির পুনরাবৃত্তি ফাংশন অনুসরণ করে


2
এই প্লাগইন আর উপলব্ধ।
এনকোডে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.