कस्टम पोस्ट प्रकारों में .html (डॉट HTML) एक्सटेंशन जोड़ें


10

क्या बिना प्लगइन के.html कस्टम पोस्ट प्रकारों में एक्सटेंशन जोड़ने का कोई तरीका है ?

पदों के लिए मैं /%postname.htmlपर्मलिंक सेटिंग्स पर उपयोग कर सकता हूं

उन पृष्ठों के लिए जिनका मैं उपयोग कर सकता हूं:

add_action('init', 'change_page_permalink', -1);
function change_page_permalink() {
    global $wp_rewrite;
    if ( strstr($wp_rewrite->get_page_permastruct(), '.html') != '.html' ) 
        $wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';
}

कस्टम पोस्ट प्रकारों के लिए ???

क्या ऊपर दिए गए कोड के समान कोई टुकड़ा है जो मुझे बदलने या .htmlकस्टम पोस्ट प्रकार यूआरएल पर जोड़ने के लिए बाध्य करता है ?


5
आप किस कारण से जोड़ना चाहते हैं?
विंस पेटिट

खैर, function post-type_permalinkएक त्रुटि फेंक देंगे। यदि आपको यह त्रुटि नहीं मिलती है, तो आपको अपनी डिबग सेटिंग्स के साथ कुछ दर्दनाक रूप से गलत मिला है। इसके अलावा कृपया अपने प्रश्न को लाइनों पर सही इरादा के साथ फिर से काम करें। धन्यवाद।
जूल

@kaiser, यह जानना है कि मैं कस्टम पोस्ट प्रकारों पर समान पर्मलिंक सेटिंग्स का उपयोग कैसे कर सकता हूं। यदि मैं /$postname.htmlपदों के लिए निर्धारित करता हूं, तो मैं कस्टम पोस्ट प्रकारों के लिए कैसे उपयोग कर सकता हूं।
user983248

आपने अपनी टिप्पणी में लिखी एक भी पंक्ति नहीं पढ़ी है, है ना? कृपया अपना कोड ठीक करें। -फ़ंक्शन नामों में भी काम नहीं करता है ...
kaiser

@kaiser हां मैंने किया था, लेकिन मैं फ्लैश नहीं हूं, और मेरे पास एक हाथ की समस्या है, इसलिए मैं टाइप नहीं कर सकता जैसा मैं सोचता हूं या बोलता हूं
user983248

जवाबों:


8

यह काम करने लगता है:

जैसे फिर से लिखना नियम बनाएँ post-type/post-name.html। आप इन सभी के लिए करने के बजाय केवल कुछ पोस्ट प्रकार के सेट के लिए नियम बनाने के लिए सरणियों का उपयोग कर सकते हैं।

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
    $new_rules = array();
    foreach ( get_post_types() as $t )
        $new_rules[ $t . '/([^/]+)\.html$' ] = 'index.php?post_type=' . $t . '&name=$matches[1]';
    return $new_rules + $rules;
}

इन पोस्ट प्रकारों के लिए नई पर्मलिंक संरचना को प्रारूपित करें।

add_filter( 'post_type_link', 'custom_post_permalink' ); // for cpt post_type_link (rather than post_link)
function custom_post_permalink ( $post_link ) {
    global $post;
    $type = get_post_type( $post->ID );
    return home_url( $type . '/' . $post->post_name . '.html' );
}

और फिर अनुगामी स्लैश को हटाने के लिए विहित URL को पुनर्निर्देशित करना बंद करें। आपको कुछ और काम करने की आवश्यकता हो सकती है, जैसा कि आप शायद ज्यादातर मामलों के लिए पुनर्निर्देशन रखना चाहते हैं।

add_filter( 'redirect_canonical', '__return_false' );

जैसा कि अन्य लोगों ने यहां कहा है, उपरोक्त करने के बाद आपको नियमों को फ्लश करने की आवश्यकता होगी, और यह options-permalink.phpव्यवस्थापक पृष्ठ पर जाकर संभव है Dashboard -> Settings -> Permalinks


6
Oi Vinicius, एक अच्छा उत्तर देने वाला अभ्यास है , कॉपी / पास्ता के टकराव से बचने के लिए सभी फ़ंक्शन नामों wpse_59024_ (प्रश्न आईडी) के साथ उपसर्ग करना ;)। । । और यह जानने का अतिरिक्त लाभ है कि कौन सा उत्तर हमारे स्निपेट्स लाइब्रेरी में है। । । । । +1 स्पॉट पर!
ब्रासोफिलो

इस कोड को किसी अन्य फिल्टर का उपयोग करने वाले को अधिलेखित कर देगा post_type_linkफिल्टर
टॉम जम्मू नॉवेल

4

आप इसके लिए एक पुनर्लेखन नियम जोड़ सकते हैं जो बिल्ट-इन पर्मलिंक्स को कस्टमाइज़ करता है, जैसे कि कस्टम पोस्ट प्रकार "उत्पाद" के लिए ...

add_action('init', 'add_html_ext_to_custom_post_types');
function add_html_ext_to_custom_post_types() {
    add_rewrite_rule('^product/([^/]+)\.html', 'index.php?product=$matches[1]', 'top');
}

(अपने flush_rulesपर्मलिंक्स को फिर से सहेज कर या ऊपर दिए गए @toscho नोट्स के जरिए) अपने नियमों को फ्लश करना न भूलें ।

चेतावनियां

  • मुझे नहीं लगता कि the_permalink()इस तरह के फ़ंक्शंस इसका उपयोग करेंगे, इसलिए आपको post_linkउन लिंक को पकड़ने के लिए फ़िल्टर जोड़ना पड़ सकता है । आप redirect_canonicalडिफ़ॉल्ट पर्मलिंक्स को रीडायरेक्ट करने के लिए फ़िल्टर में भी जोड़ सकते हैं , ताकि / उत्पाद / foo और / उत्पाद / foo / redirect to /product/foo.html।
  • आपको उन अन्य URL के लिए अतिरिक्त पुनर्लेखन जोड़ने की आवश्यकता होगी, जो आपकी साइट का उपयोग करती हैं, जैसे कि फ़ीड URL, बाद के पृष्ठ, ट्रैकबैक आदि। ऊपर दिया गया कोड मुख्य कस्टम पोस्ट प्रकार पृष्ठ के लिए काम करेगा।

2

यदि आप अपने लिए काम को संभालने के लिए एक वर्डप्रेस प्लगइन पसंद करेंगे, तो वर्डप्रेस प्लगइन रिपॉजिटरी में कस्टम पोस्ट टाइप पेर्मलिंक देखें । वर्डप्रेस 3.4.1 पर परीक्षण किया गया और यह पूरी तरह से काम करता है।

प्लगइन को सक्रिय करने के बाद, बस डैशबोर्ड पर जाएँ -> सेटिंग्स -> पेरालिंक्स। आप प्रत्येक पंजीकृत कस्टम पोस्ट प्रकार के लिए विशिष्ट पुनर्लेखन जोड़ सकते हैं।


3
हर पेज लोड पर फिर से लिखना नियमों को न करें।
FUXIA

यह कोड काम नहीं कर रहा है, भले ही आप xplus3.net/2010/05/20/wp3-custom-post-type-permalinks से कोड कॉपी और पेस्ट करें, यह सुनिश्चित करें कि यह परीक्षण न करने के लिए अपेक्षित -1 के रूप में काम करता है
user983244

@toscho आप ऐसा करने के लिए या उसे रोकने के लिए कैसे मान लेते हैं?
user983248

1
flush_rules()केवल डे / सक्रियण पर बुलाया जाना चाहिए क्योंकि यह बहुत धीमा है। आप यह देखने के $GLOBALS['wp_rewrite']->rulesलिए जांच सकते हैं कि क्या नियम पहले से ही ज्ञात हैं।
FUXIA

@ मिचेल एक्लंड यह एक 404 देता है जो मुझे काम नहीं करता है। क्या आपने उस कोड का परीक्षण किया?
user983248
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.