एक कस्टम पोस्ट प्रकार नाम बनाम पेज पर्मलिंक संघर्ष (एक ही स्लग) को हल करें


19

मेरे पास एक कस्टम पोस्ट प्रकार है जिसे "विज़िंगशस" कहा जाता है, और उस स्लग के साथ एक पृष्ठ भी है। यह वैसा ही है जैसा होना चाहिए (होना चाहिए)।

वर्तमान में, " http://my-site.com/visningshus " उस प्रकार के सभी पदों को सूचीबद्ध करता है। मैं वह पेज दिखाना चाहता हूं जिसमें उस पारलिंक स्लग की जगह है।

मैं वर्डप्रेस कैसे बना सकता हूं पोस्ट प्रकार नाम को पूर्वता नहीं ले सकता है, लेकिन इसके बजाय पर्मलिंक, और पृष्ठ दिखाऊंगा?

जवाबों:


33

इस CPT के लिए संग्रह पृष्ठ को अक्षम करना सबसे आसान होगा:

register_post_type( 'visningshus',
    array(
        [...]
        'has_archive' => false,
        [...]
    )
);

"सेटिंग> पेरालिंक्स" के बाद आप परमाल को ताज़ा करना न भूलें


1
पूरी तरह से काम किया है - लेकिन अब कस्टम पोस्ट प्रकार के नाम से शुरू होने वाले सभी पर्मलिंक एक 404 देते हैं, इसके बावजूद वे wp-admin में सही हैं और कोई फिर से लिखना नहीं लगता है। यह कहना है, साइट पर सभी permalinks सही हैं, लेकिन सभी कस्टम पोस्ट 404 देते हैं। क्या आप इसके साथ मदद कर सकते हैं? :)
हेनरिक एरलैंडसन

@HenrikErlandsson शायद आपके पोस्ट प्रकार में पृष्ठ का समान नाम है। इस मामले में मैं आपको अपना पोस्ट प्रकार नाम बदलने की सलाह देता हूं। उदाहरण: कस्टम पोस्ट प्रकार का नाम - इससे पहले: उत्पादों के बाद: cpt_products।
ब्रूनो मोंटीरो

बहुत बुद्धिमान। समस्याओं का एक समूह हल करता है
bysanchy

8

मैं @ कार्ल की पोस्ट पर टिप्पणी करने के लिए पर्याप्त उच्च प्रतिष्ठा नहीं हूं, लेकिन उसका सही उत्तर है (कम से कम पेज स्लग और कस्टम पोस्ट प्रकार रखने की इस स्थिति को उसी तरह से स्लग करें और आर्काइव.फैप फ़ाइल का उपयोग न करें)

लेकिन उनका जवाब पग-पग पर त्रुटियों को जन्म देता है। पृष्ठांकन त्रुटियों से बचने के लिए:

add_rewrite_rule('^visningshus/page/([0-9]+)','index.php?pagename=visningshus&paged=$matches[1]', 'top');

यह पृष्ठ पर नज़र रखता है, पृष्ठ संख्या को पकड़ता है, और फिर फ्लिप पक्ष पर मेल खाने वाले स्लग के साथ पृष्ठ का उपयोग करने के लिए मजबूर करता है, और फिर पृष्ठ चर सम्मिलित करता है।

यह इसके अलावा में करने के लिए 'has_archive' => false,ऊपर तैनात वांछित कार्यशीलता को प्राप्त करना चाहिए।

जैसा कि अन्य लोगों ने कहा है, इस बदलाव को करने के बाद सेटिंग्स> पेरीलिंक पर जाकर फिर से लिखना सुनिश्चित करें।

आशा है कि यह किसी की मदद करता है, क्योंकि मुझे पता है कि यह वास्तव में लंबे समय के लिए मुझे स्टम्प्ड करता है।


4

तजेना हेनरिक!

मुझे लगता है कि आपको बस इतना करना है कि वर्डप्रेस रीराइट नियमों को फिर से लिखना है जो पहले ही बनाए जा चुके हैं। अपने विषय के अपने functions.php में इस कोड स्निपेट को जोड़ें या इसे एक अलग पगिन के रूप में शामिल करें ...

add_action('init', function () {
     add_rewrite_rule('visningshus/?$','index.php?pagename=visningshus', 'top');
     flush_rewrite_rules();
}, 1000);

4
यदि कोई इसका उपयोग करता है, तो हटाएं flush_rewrite_rules();आपको initहर बार फिर से नियमों को बदलना नहीं चाहिए । एक बार पुनः लोड करें, फिर इसे हटाएं, या मैन्युअल रूप से व्यवस्थापक डैशबोर्ड में
पर्मलिंक सेटिंग्स पर जाकर पर्मलिंक्स

0

मैंने संघर्ष को हल किए बिना इसे हल किया। स्लग विसिंगशस के साथ एक पेज बनाएं और उसमें जो चाहें लिखें। इस पृष्ठ की आईडी पर ध्यान दें।

आर्काइव-कस्टम-पोस्ट टाइप type.php टेम्प्लेट को बनाएं और कस्टमाइज़ करें जो भी आपको पसंद है (सबसे अधिक संभावना है कि आप सिर्फ एक पेज टेम्प्लेट का उपयोग करेंगे) लेकिन लूप वाले हिस्से को बदलें

$recent = new WP_Query("page_id=your-page-id");  
while($recent->have_posts()) : $recent->the_post();
    the_content();
endwhile;

इसके बाद जब आप http://my-site.com/visningshus पर जाएंगे तो आपको पेज के द्वारा प्रबंधित सामग्री सही url पर दिखाई देगी।

मुझे पता है कि यह काम करता है।


अच्छा विचार है, लेकिन यह अत्यधिक जटिल है। क्या आपने मेरे समाधान की कोशिश की?
क्राफ्ट्सर

@ क्राफ्टर नहीं, मैंने नहीं किया। मैं अगली बार कोशिश करूँगा। धन्यवाद!
मोलोकॉम

यह हेडर की तरह कुछ साइड इफेक्ट्स भी है और सब कुछ अभी भी बनाया जा रहा है जैसे कि यह एक आर्काइव पेज था न कि पेज। मैं उस समाधान का उपयोग करने की सलाह नहीं दूंगा।
क्राफ्टर

क्या होगा अगर पेज आईडी बदल जाए? यह सुरक्षित नहीं है।
जोएल जेम्स

0

वोट करने की अनुमति नहीं है, लेकिन + कार्ल्स समाधान के लिए, register_post_type होना चाहिए

'has_archive' => false

सरल। हालांकि, जब आप पृष्ठ पर अंकुरण की समस्याओं का सामना करते हैं, तो एक नज़र डालें

add_rewrite_rule

0

मेरे लिए यह निश्चित है कि संग्रह को झूठे के रूप में सेट किया जा रहा था, लेकिन अपने कस्टम पोस्ट प्रकार को सेट करते समय पदानुक्रम को झूठे में सेट करना!


0

यहां किसी भी कस्टम पोस्ट प्रकार स्लग के लिए कस्टम पोस्ट प्रकार सामग्री पर पृष्ठांकन को प्राथमिकता देने का एक सामान्य समाधान है।

// prioritize pagination over displaying custom post type content
add_action('init', function() {
  add_rewrite_rule(
    '(.?.+?)/page/?([0-9]{1,})/?$',
    'index.php?pagename=$matches[1]&paged=$matches[2]',
    'top'
  );
});

इस स्निपेट को जोड़ने के अलावा, आपको यह भी सुनिश्चित करना चाहिए कि आपके कस्टम पोस्ट का प्रकार क्या है archive = false

और अंतिम लेकिन कम से कम पर्मलिंक्स सेटिंग पेज सेटिंग्स> पेरालिंक्स (/wp/wp-admin/options-permalink.php) पर जाएं और पेज पर लिंक संरचना को ताज़ा करने के लिए वर्तमान सेटिंग्स को सहेजें।

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