यह आसान नहीं होना चाहिए ?! कस्टम पोस्ट प्रकार / कस्टम टैक्सोनॉमी पर्मलिंक


11

तो यह मुझे बिल्कुल पागल बना रहा है। मैंने इसे ठीक करने के लिए दिन बिताए हैं और मैं यह काम नहीं कर सकता कि यह इतना मुश्किल क्यों है क्योंकि निश्चित रूप से यह एक बहुत ही सामान्य पर्मलिंक संरचना है!

मैंने सैकड़ों उत्तर और पोस्ट देखे और उनमें से कोई भी समस्या को हल करने के लिए नहीं लगता है।

मुझे बस यह संरचना चाहिए:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

इसलिए मैं निम्नलिखित हासिल करता हूं:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

हर बार जब मैं कुछ करने की कोशिश करता हूं तो मुझे 404 त्रुटियां होती हैं या ठहराव काम नहीं करता है।

मुझे समझ नहीं आता कि यह इतना कठिन क्यों है!

किसी भी मदद वास्तव में सराहना की!

धन्यवाद

================================================== ==== ================== व्यक्तिगत जानकारी ==================

वर्तमान में मैं पोस्ट प्रकार और वर्गीकरण का पंजीकरण इस प्रकार कर रहा हूं:

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

अगर मैं दोनों को 'साहित्य' के रूप में पंजीकृत करता हूं, तो मुझे mysite.com/literature पेज पर 404 मिलता है, लेकिन यह मेरी अनुमति को प्रदर्शित करता है: mysite.com/literature/books/mybook

इस सवाल पर सलाह का पालन करने के बाद - कस्टम पोस्ट प्रकार, वर्गीकरण और पर्मलिंक

मैंने इसे अपने कार्यों में शामिल किया है:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

और मेरी पोस्ट के प्रकार को 'slug' => 'literature/%literature_category%' बदल दिया और मेरी टैक्सोनॉमी को बदल दिया'slug' => 'literature'

यह महान काम करता है सिवाय इसके कि mysite.com/literatureपृष्ठ पर अंक लगाना काम नहीं करता है इसलिए मुझे निम्नलिखित यूआरएल पर 404 त्रुटि मिलती है:

mysite.com/literature/page/2/


जिज्ञासा से बाहर, आपने अब तक क्या प्रयास किया है?
मैथ्यू बोयन्स

इस उत्तर ने मुझे निकटतम - wordpress.stackexchange.com/questions/5308/… - मिला - लेकिन फिर यह पृष्ठांकन के साथ काम नहीं किया और सुझाए गए प्लगइन ने भी काम नहीं किया
fxfuture

कूल, खुशी से मैंने पूछा, कि मुझे कुछ समय बचा लिया!
मैथ्यू बोयन्स

जवाबों:


6

इस प्रश्न पर सलाह का पालन करें जैसा कि आपने पहले ही किया था, लेकिन इसे अपने कोड में जोड़ें:

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

अंत में, सेटिंग> पेरामलिंक पर जाएं और सेव को हिट करें। यदि यह अभी भी काम नहीं करता है, तो अपने Permalinks को फिर से सहेजें। कभी-कभी मुझे ऐसा लगता है कि आपको उन्हें दो बार बचाना है, लेकिन कौन जानता है। वैसे भी, मुझे पता है कि आप कैसे बनाते हैं। ध्यान दें कि कंप्यूटर विज्ञान मानक उत्तर # 1 लागू होता है: यह मेरे लिए काम करता है ... ;-)

टीएमआई की जमीन से ...

संदर्भ के लिए, पृष्ठ डिफ़ॉल्ट रूप से क्यों काम नहीं करते हैं , इसका कारण यह है कि वर्डप्रेस साहित्य /% साहित्य_श्रेणी% /% पुस्तक% /% पृष्ठ% के लिए एक पुनर्लेखन नियम में रखता है, जो यदि आप इसके बारे में सोचते हैं, तो कुल अर्थ समझ में आता है। तो इस क्रम में आपके डिफ़ॉल्ट परमिटलिंक में ये प्रतिस्पर्धा नियम हैं:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

हम वास्तव में यहां कर रहे हैं, बाद वाले को परेशान करके इनका क्रम बदल रहा है (हम इसे अंदर रख सकते हैं, लेकिन उसके बाद हर पुनः लिखना पृष्ठ लोड पर चलाने के लिए एक और regex है) और इसे सरणी की शुरुआत में जोड़ सकते हैं।

मजेदार तथ्य: यदि आपके पास कभी भी "पुस्तक" शीर्षक "पेज" है और इसमें कई पृष्ठ हैं, तो यह क्रम संघर्ष करेगा और इसके बाद के पृष्ठ काम नहीं करेंगे!


हे भगवान, यह मेरे लिए हुआ कि मेरा वाक्यविन्यास यहां गलत था। काफी मजेदार है, यह मेरे लिए काम करता है और जब मैं इसे ठीक करता हूं, तो यह काम नहीं करता है। मैं इसे जारी रखूंगा और जब मैं इसका पता
लगाऊंगा

आपकी मदद के लिए धन्यवाद मैथ्यू। मैंने कोशिश की और दुर्भाग्य से यह काम नहीं किया। मैंने अपने प्रश्न में अधिक जानकारी जोड़ी है जो उम्मीद करता है कि यह बेहतर व्याख्या करता है!
fxfuture

1
ठीक है, भ्रम के लिए मेरी माफी। वहाँ थोड़ा सा मस्तिष्क गैस था (हाल ही में कुछ मस्तिष्क सेम होना चाहिए)। मेरा उत्तर अपडेट कर दिया गया है, और फिर से यह मेरे लिए काम करता है। अपने पर्मलिंक्स को बचाने के लिए याद रखें।
मैथ्यू बोयन्स

1
ओह ठीक है, मैंने आपका अद्यतन प्रश्न देखा। तो यह नहीं है कि / साहित्य / कथा / पृष्ठ / २ काम नहीं करता है, यह है कि / साहित्य / पृष्ठ / २ काम नहीं करता है, क्या यह सही है? यदि ऐसा है, तो यह एक आसान तरीका है, हम एक स्तर पर एक ही काम करेंगे
मैथ्यू बोयन्स

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