पर्मलिंक्स: कस्टम पोस्ट प्रकार -> कस्टम टैक्सोनॉमी -> पोस्ट


39

मुझे वर्डप्रेस नियमों को फिर से लिखने में परेशानी हो रही है, और कुछ मदद का उपयोग कर सकते हैं।

मेरे पास एक कस्टम पोस्ट प्रकार है जिसे कहा जाता है _shows_

सभी शो में एक ही कस्टम टैक्सोनॉमी श्रेणी _show-category_.ए है _show_जिसमें कभी एक से अधिक नहीं होंगे _show-category_

मैं अपने तरीके इस तरह से रूट करना चाहूंगा:

www.mysite.com/shows/  =>  archive-shows.php

www.mysite.com/shows/%category%/ => taxonomy-show-category.php

www.mysite.com/shows/%category%/%postname%/ => single-shows.php

इसलिए एक वास्तविक दुनिया उदाहरण के रूप में, हम कहते हैं कि हमारे पास एक _show-category_"फू" और एक _show_पोस्ट है जिसका शीर्षक "बार" है जिसमें "फू" जैसा है _show-category_। मुझे उम्मीद है कि मेरा वर्डप्रेस ऐप इस तरह दिखेगा:

www.mysite.com/shows/foo/ => shows all posts under the foo category
www.mysite.com/shows/foo/bar => shows the indivual post

मैं जब संभव हो तो प्लगइन्स से बचने की कोशिश करता हूं, लेकिन किसी भी समाधान के लिए खुला हूं।


1
बस आपको किसी ऐसी चीज़ की ओर इशारा करना है जो मुझे पहले करनी थी .. wordpress.stackexchange.com/questions/102246/…
reikyoushin

जवाबों:


70

सबसे पहले, अपने वर्गीकरण रजिस्टर और सेट slugके तर्क rewriteको shows:

register_taxonomy(
    'show_category',
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows', 'with_front' => false ),
        // your other args...
    )
);

अगला, अपना पोस्ट प्रकार दर्ज करें और स्लग को सेट करें shows/%show_category%, और इसके लिए has_archiveतर्क सेट करें shows:

register_post_type(
    'show',
    array(
        'rewrite' => array( 'slug' => 'shows/%show_category%', 'with_front' => false ),
        'has_archive' => 'shows',
        // your other args...
    )
);

अंतिम, post_type_linkअलग-अलग शो पर्मलिंक में शो श्रेणी को प्रतिस्थापित करने के लिए एक फिल्टर जोड़ें :

function wpa_show_permalinks( $post_link, $post ){
    if ( is_object( $post ) && $post->post_type == 'show' ){
        $terms = wp_get_object_terms( $post->ID, 'show_category' );
        if( $terms ){
            return str_replace( '%show_category%' , $terms[0]->slug , $post_link );
        }
    }
    return $post_link;
}
add_filter( 'post_type_link', 'wpa_show_permalinks', 1, 2 );

संपादित करें

ऊपर के has_archiveतर्क को भूल गए register_post_type, जिसे सेट किया जाना चाहिए shows


1
मिलो, धन्यवाद! पोस्ट_टाइप_लिंक फ़िल्टर मेरे लिए अनुपलब्ध टुकड़ा था। कोई भी इस समस्या के साथ इस थ्रेड को पढ़ रहा है, केवल ध्यान देने योग्य बात यह है कि wpa_show_permalinks फ़ंक्शन पर एक छोटी सी गलती है, जहां $ पोस्ट-> पोस्ट_टाइप == 'शो' वास्तव में 'शो' होना चाहिए। धन्यवाद फिर से मिलो!
पॉल टी

4
यदि आप किसी मौजूदा वर्डप्रेस इंस्टेंस में बदलाव कर रहे हैं, तो सुनिश्चित करें कि आप सेटिंग> पेरामलिंक पर जाएं और सेव पर क्लिक करें। जब तक आप कार्य नहीं करेंगे। तब तक आप में बदलाव नहीं होंगे।
जे नीली

2
यह लगभग मेरे लिए काम करता है कि पोस्ट टाइप पेज पर टैक्सोनॉमी प्रदर्शित करता है, / पोस्ट_टाइप / टैक्सोनॉमी / एक वैध पेज है (पहले 404) लेकिन मेरा / पोस्ट_टाइप / टैक्सोनॉमी / पोस्ट 404'ing है। मैंने देखा जब दोनों "show_category" के ऊपर वर्गीकरण को पंजीकृत करते हुए, "show" पंजीकृत किया जा रहा था, भले ही केवल show_category ही वर्गीकरण है। मैं केवल वर्गीकरण का पंजीकरण कर रहा हूं।
justinavery

4
@ किसी भी तरह से शो / टैक्स / सबटैक्स / पोस्ट जैसे उप उप कर के साथ इसे प्राप्त करने का कोई तरीका है?
बेने

2
मैं कामना करता हूं कि यह मेरे लिए भी काम करे लेकिन हर एक विलक्षणता 404 में समाप्त होती है ....
बीते
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.