কাস্টম পোস্ট টাইপ এবং ট্যাক্সনমি পুনর্লিখনের কাঠামোর মিশ্রণ?


30

মূলত আমি কাস্টম পোস্টের ধরণগুলি ব্যবহার করে একটি শব্দকোষ অর্জন করতে চাই এবং আমার যেমন চাই সেভাবে পুনর্লিখনগুলি সেট আপ করার কিছু সমস্যা রয়েছে। আমি এটি চাই:

মূল শব্দকোষ URL: http://example.com/glossary/

শব্দ A এর সাথে শুরু শব্দের সংজ্ঞা : http://example.com/glossary/a/

একটি একক শব্দকোষের জন্য URL: http://example.com/glossary/a/atomic/

আমি আসলে নীচের কোডটি ব্যবহার করে এটি অর্জন করেছি তবে আমি নিশ্চিত যে এটি করার একটি অত্যন্ত বিশ্রী উপায় এবং আমি জানি যে এটি কোথাও ত্রুটিযুক্ত কারণ পৃষ্ঠাগুলি দেখার সময় ভুল টেমপ্লেটগুলি বলা হয়। Http://example.com/glossary/ ব্যতীত যেখানে আর্কাইভ-সুমো-গ্লোসারি-টার্ম.এফপি প্রত্যাশিত হিসাবে ডাকা হয়, অন্য দুটি আমার থিমটিতে কেবল সূচক.এফপি সক্রিয় করে।

এখানে ( functions.phpথিম মধ্যে):

add_action('init', 'create_glossary');
function create_glossary()
{
    register_post_type
    (
        'sumo-glossary-term',
        array
        (
            'labels' => array
            (
                'name' => _x('Glossary Terms', 'post type general name'),
                'singular_name' => _x('Glossary Term', 'post type singular name')
                # And so on …
            ),
            'supports' => array('title', 'editor', 'thumbnail'),
            'public' => true,
            'rewrite' => array
            (
                'slug' => 'glossary',
                'with_front' => false

            ),
            'query_var' => 'glossary-term',
            'has_archive' => true
        )
    );

    register_taxonomy
    (
        'sumo-glossary-letter',
        'sumo-glossary-term',
        array
        (
            'hierarchical' => true,
            'labels' => array
            (
                'name' => _x('Letters', 'taxonomy general name'),
                'singular_name' => _x('Letter', 'taxonomy singular name')
                # And so one
            ),
            'show_ui' => true,
            'query_var' => 'glossary-letter',
            'rewrite' => false
        )
    );
}

add_filter('post_type_link', 'glossary_term_permalink', 10, 4);
function glossary_term_permalink($post_link, $post, $leavename, $sample)
{
    if ($post->post_type == 'sumo-glossary-term')
    {
        $permalink = str_replace('glossary/', 'glossary/' . $post->post_name[0] . '/', $post_link);
    }
    return $permalink;
}

add_rewrite_rule('^glossary/([^/]*)?$','index.php?glossary-letter=$matches[1]','top');
add_rewrite_rule('^glossary/([^/]*)/([^/]*)?$','index.php?glossary-term=$matches[2]','top');

উত্তর:


30

আপনি সর্বদা সেই টেম্পলেটটি ওভাররাইড করতে পারেন যা কল template_includeবা সম্পর্কিত ফিল্টার দ্বারা ডাকা হবে তবে এটি কাস্টম সংরক্ষণাগারগুলির সাহায্যে আরও গভীর সমস্যাগুলি আড়াল করতে পারে।

আমি এটি বুঝতে পেরে, আপনি নিম্নলিখিত কাঠামোটি ব্যবহার করতে চান:

  • /glossary/সমস্ত sumo-glossary-termপোস্টের জন্য একটি সংরক্ষণাগার পৃষ্ঠা হওয়া উচিত
  • /glossary/[letter]/বর্গীকরণ সূত্র মেয়াদ পোস্টগুলি জন্য কি সংরক্ষণাগার হওয়া উচিত [letter]sumo-glossary-letterবর্গীকরণ সূত্র
  • /glossary/[letter]/[term-name]/স্বতন্ত্র sumo-glossary-termপদ হওয়া উচিত

এর অর্থ এই যে প্রথম টেমপ্লেট লোড হবে archive-sumo-glossary-term.php, দ্বিতীয় লোড করা হবে taxonomy-sumo-glossary-letter.phpএবং তৃতীয় লোড করা হবে single-sumo-glossary-term.php

আমি ওয়ার্ডপ্রেস 3.2 এ স্পষ্টতভাবে বিভাগের পুনর্লিখন স্লাগ সেট করে এবং পুনরায় লেখার স্লাগ এবং পোস্ট টাইপের আর্কাইভ স্লাগ এবং অন্য কোনও পুনর্লিখনের বিধি দ্বারা এটি অর্জন করেছি। এছাড়াও, অগ্রাধিকারগুলি সঠিক ছিল তা নিশ্চিত করার জন্য আমি প্রথমে করশাসনটি এবং তারপরে পোস্টের ধরণটি নিবন্ধভুক্ত করেছি (অন্যথায় মত একটি ইউআরএল গ্লসারি চিঠির পৃষ্ঠাগুলির 2 এর পরিবর্তে /glossary/f/page/2শব্দকোষে যায় ))pagef

add_action('init', 'create_glossary');
function create_glossary()
{

    register_taxonomy
    (
        'sumo-glossary-letter',
        array(),
        array
        (
            'hierarchical' => true,
            'labels' => array
            (
                'name' => _x('Letters', 'taxonomy general name'),
                'singular_name' => _x('Letter', 'taxonomy singular name')
                # And so one
            ),
            'show_ui' => true,
            'query_var' => 'glossary-letter',
            'rewrite' => array(
                'slug' => 'glossary',
            ),
        )
    );

    register_post_type
    (
        'sumo-glossary-term',
        array
        (
            'labels' => array
            (
                'name' => _x('Glossary Terms', 'post type general name'),
                'singular_name' => _x('Glossary Term', 'post type singular name')
                # And so on …
            ),
            'supports' => array('title', 'editor', 'thumbnail'),
            'public' => true,
            'rewrite' => array
            (
                'slug' => 'glossary/%sumo-glossary-letter%',
                'with_front' => false

            ),
            'query_var' => 'glossary-term',
            'has_archive' => 'glossary',
            'taxonomies' => array( 'sumo-glossary-letter' ),
        )
    );
}

add_filter('post_type_link', 'glossary_term_permalink', 10, 4);
function glossary_term_permalink($post_link, $post, $leavename, $sample)
{
    if ( false !== strpos( $post_link, '%sumo-glossary-letter%' ) ) {
        $glossary_letter = get_the_terms( $post->ID, 'sumo-glossary-letter' );
        $post_link = str_replace( '%sumo-glossary-letter%', array_pop( $glossary_letter )->slug, $post_link );
    }
    return $post_link;
}

আমি আগামীকাল চেষ্টা করব এবং দেখুন এটি কৌশলটি কাজ করে কিনা এবং এখানে ফিরে আসুন। ধন্যবাদ!
মেরিসিডেড

ঠিক আছে, আগামীকাল পর্যন্ত ঠিক নয় ... এটি প্রায় পুরোপুরি কাজ করেছিল! ধন্যবাদ! যা কাজ করছে না তা হচ্ছে /glossary/। আমাকে একটি 404 দেয় ( archive-sumo-glossary-term.phpসেট আপ করা হয়)। কোন ধারনা? বলতে হবে যে আমি ডাব্লুপিপি ৩.০.১-এ আটকেছি এবং এটি সম্ভবত সংস্করণের সমস্যা। আমি যখন আপগ্রেড করতে সক্ষম হয়েছি তখন এটি আবার পরীক্ষা করতে হবে। যাইহোক, বেশিরভাগ অংশের জন্য এটি কাজ করছে এবং এখনের জন্য আমার অগত্যা প্রয়োজন হবে না /glossary/এবং কেবলমাত্র চিঠিটি এ পুনর্নির্দেশ করতে হবে আপনাকে আবার ধন্যবাদ!
মেরিএসডিএড

আরে @maryisdead, আমার ঠিক একই সমস্যা ছিল এবং ঠিক একই সমাধানটি নিয়ে এসেছি, তবে আপনার ঠিক একই সমস্যাটি রেখে দেওয়া হয়েছিল - আপনি সংরক্ষণাগার-গ্লোসারি.এফপি টেম্পলেটটিতে যাওয়ার জন্য কীভাবে / গ্লসারি পাবেন? আমি কেবল উত্তরটি খুঁজে পেয়েছি - ব্যবহারের 'has_archive' => 'glossary'পরিবর্তে has_archive => true আমি কেবলমাত্র খেয়াল করেছিলাম যে জান এর উত্তরটি সেভাবেই রয়েছে তবে আপনি আপনার মূল কোডটিতে সেভাবে নেই - আপনি কি সেই অংশটি আপডেট করেছিলেন? আমি পরিবর্তন
জেফ

আরে জেফ! হ্যাঁ, সেই অংশটি আপডেট করেছেন। ঠিক আবার পরীক্ষা করা হয়েছে, এখনও কাজ করছে না। প্রশ্নে থাকা ওয়ার্ডপ্রেস ইনস্টলেশনটি এখনও আপ টু ডেট (3.0.0) নেই তাই সম্ভবত এটি এখনও সমস্যার মূল root
মেরিএসডিএড

ডাব্লুপিপি ৩.২.১ ব্যবহার করে এখানে একই সমস্যা। তবুও কোন সমাধান নেই?
রিচার্ড বি

0

আমি ব্যক্তিগতভাবে এটি ব্যবহার করি নি, তবে আপনি যা দেখতে চাইতে পারেন তা হ'ল "অ্যাড_উরাইট_রুল"

http://codex.wordpress.org/Rewrite_API/add_rewrite_rule

একবার পারমলিকগুলি পরিবর্তন করার পরে সেগুলি সংরক্ষণ করতে ভুলবেন না।


আমি আসলে ব্যবহার করি add_rewrite_rule, কেবল আমার কোডটি নীচে স্ক্রোল করুন। :-) এটি এখন পর্যন্ত ঠিকঠাকভাবে কাজ করছে, কেবলমাত্র ভুল টেমপ্লেটগুলি এইভাবে করার সাথে সাথে ডাকা হবে।
মেরিসিডেড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.