URL से कस्टम पोस्ट प्रकार का स्लग निकालें


15

इसके लिए उपयोगी उत्तर नहीं मिला। मैं संघर्ष के मुद्दों और इसके कारण होने वाली सभी समस्याओं से अवगत हूँ, अगर यह पॉसिबल नहीं है तो मैं उत्सुक हूँ। इसके लिए WP रीराइट की आवश्यकता होगी, मुझे यह बहुत पता है।

मूल रूप से, मान लें कि हमारे पास "घटनाओं" का सीपीटी है। मैं चाहता हूं कि किसी एकल घटना के पृष्ठ में URL http://domain.com/single-event-name और न कि http://domain.com/events/single-event-name हो । कैसे इसके बारे में जाने के लिए कोई विचार?


हमेशा उस बारे में जानना चाहता था, कभी सवाल पूछने के बारे में नहीं सोचा। धन्यवाद!
फिश्ची

2015 में @robbennet अभी भी शैली के साथ ऐसा करने का एक वैध तरीका नहीं लगता है।
बेन रैसिकॉट सेप

जवाबों:


9

यह है कि आप नौकरी का पहला भाग कैसे कर सकते हैं - पोस्ट लिंक में ओ ओटीटी स्लग प्राप्त करें (जैसे। समाचार पोस्ट प्रकार)।

function df_custom_post_type_link( $post_link, $id = 0 ) {  

    $post = get_post($id);  

    if ( is_wp_error($post) || 'news' != $post->post_type || empty($post->post_name) )  
        return $post_link;  

    return home_url(user_trailingslashit( "$post->post_name" ));  
}
add_filter( 'post_type_link', 'df_custom_post_type_link' , 10, 2 );

अब 'समाचार' के लिए एक बार फिर से लिखना चाहिए, क्योंकि आपको 404 त्रुटि मिलेगी।

इस तरह से पुनर्लेखन नियम जोड़ें:

function df_custom_rewrite_rule() {
    add_rewrite_rule('(.*?)$', 'index.php?news=$matches[1]', 'top');
}
add_action('init', 'df_custom_rewrite_rule');

फिर हमें नियमों को फिर से लिखना होगा, इसलिए सेटिंग - पेरामलिंक पर जाएं और परिवर्तनों को सहेजें।


1
आपको init पर पुनर्लेखन नियम नहीं जोड़ना चाहिए। आपको अपना नियम वर्तमान नियमों में जोड़ना चाहिए।
क्रिस_ओ

2
@ क्रिस_ क्या आप विस्तृत कर सकते हैं? वर्तमान नियमों में कोई इसे कैसे जोड़ेगा?
देसी

इस कोड को जोड़ने के बाद, मेरे सभी पृष्ठों के URLs जैसे example.com/about-us ने काम करना बंद कर दिया है? इसके लिए कोई उपाय?
राहुल गुप्ता

4

आप स्लग को हटाने के लिए इस प्लगइन ( http://wordpress.org/extend/plugins/remove-slug-from-custom-post-type/ ) को आज़मा सकते हैं , लेकिन यह तभी काम करेगा जब पर्मलिंक संरचना /% पोस्टनाम हो % /


वास्तव में यह प्लगइन बहुत बढ़िया है! मैं इस प्लगइन का एक अनुभवी उपयोगकर्ता हूँ और मैं इसे पूरी तरह से सुझाता हूँ! यहाँ प्लगइन की साइट का लिंक दिया गया है, जो इसे गहराई से समझाता है। अंतिम विवरण
कुलदीप दफ्तरी

यह एक अच्छा प्लगइन है, और इसमें वह विशेषता है जिसकी मुझे तलाश थी। @ बर्टोज़ज़ समाधान एक सीपीटी के लिए विशेष रूप से है, हालांकि आप भी इससे सामान्य विचार प्राप्त करते हैं। इस प्लगइन में खुदाई के बाद अब यह सब स्पष्ट है, धन्यवाद!
फिस्ची

0

आप हमेशा यह जांचने के लिए "parse_request" में हुक लगा सकते हैं कि यह देखने के लिए कि अनुरोध नाम के साथ एक कस्टम प्रकार मौजूद है और फिर क्वेरी_वर को उचित रूप से संशोधित करें। इसके अलावा पर्मलिंक उत्पन्न करने के लिए आपको @ बार्टोज़ की प्रतिक्रिया की तर्ज पर कुछ की आवश्यकता होगी:

 add_filter('parse_request', "t21_parse_request" , 1, 1);

 function t21_parse_request($wbobj)
 {
      $vars = $wpobj->query_vars;
      $slug = $query_vars['pagename'];

      $posts = get_posts(array(
           "post_type" => "event",
           "post_name" => $slug
      ));

      if($posts)
      {
           //we know your "event" entry exists so we now amend the query_vars
           //first unset the 'page' and 'pagename'
           unset($query_vars['page']);
           unset($query_vars['pagename'];

           //now rebuild the query_vars
           $query_vars['post_type'] = "event"; //CPT name
           $query_vars['name'] = $slug;
           $query_vars['event'] = $slug //again - this constructs the "event=myevent" query string
      }
      else
      {
           //just return $wpobj since we know that there is no "event"
           return $wpobj;
      }
 }

हालांकि यह मान लिया गया है कि आपके पास पोस्टनाम के समान नाम के साथ कोई भी पोस्ट नाम नहीं होगा अन्यथा, पोस्ट कभी भी प्रकट नहीं होगी क्योंकि यह पहले इवेंट प्रकार के साथ मेल खाता है।


0
function register_cpt_type() {
    register_post_type('cpt', array(
        'rewrite' => array("slug" => "/cpt", "with_front" => false),
    ));
}
add_action('init', 'register_cpt_type')

function cpt_rewrite_rule() {
    add_rewrite_rule('(.*?)$', 'index.php?cpt=$matches[1]', 'top');
}
add_action('after_theme_setup', 'cpt_rewrite_rule');

यूआरएल को फिर से लिखना, फिर संपादित करें .htaccess संपादित करें

RewriteRule ^cpt/(.+)$ /$1 [R=301,L]
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.