अतिरिक्त क्वेरी संस्करण के साथ खोज परिणामों के लिए बहुत प्यर्मलिंक्स


10

मैं जानना चाहता हूं कि मैं एक खोज URL को कैसे पुनः लिख सकता हूं जिसमें एक अतिरिक्त क्वेरी संस्करण शामिल है जिसमें एक बहुत ही पेर्मलिंक का उपयोग करके wp_redirectऔर template_redirectहुक है।

मैं से कोड ले लिया है नाइस खोजें जो परिवर्तन करने के लिए ठीक काम करता है प्लगइन http://example.com?s=africaमें http://example.com/search/africa:

add_action( 'template_redirect', 'my_rewrite' ) );

function my_rewrite() {

        if ( is_search() and false === strpos( $_SERVER['REQUEST_URI'], '/search/' ) ) {
            wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) );
            exit();
        }

    }

लेकिन मैं Relevanssi प्लगइन के साथ संयोजन में एक चुनिंदा ड्रॉपडाउन का उपयोग कर रहा हूं ताकि आगंतुकों को किसी विशेष पोस्ट प्रकार की खोज को कम करने की अनुमति मिल सके। यह एक post_typeक्वेरी संस्करण जोड़ता है , उदाहरण के लिए http://example.com?s=africa&post_type=features। मैं चाहूंगा कि इसका URL कुछ पसंद आए http://example.com/search/africa/section/features

नाइस सर्च कोड के कारण post_type क्वेरी संस्करण खो जाता है। इसलिए मैंने निम्नलिखित कोड आज़माया:

function my_rewrite() {

    if ( is_search() and false === strpos( $_SERVER['REQUEST_URI'], '/search/' ) ) {
        if ( isset( $_GET['post_type'] ) and '' !== $_GET['post_type'] ) {
            wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) . '/section/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 'post_type' ) ) ) );
        } else {
            wp_redirect( get_bloginfo( 'home' ) . '/search/' . str_replace( ' ', '+', str_replace( '%20', '+', get_query_var( 's' ) ) ) );
        }
        exit();
    }

}

लेकिन वर्डप्रेस अब सोचता है कि खोज शब्द है africa/section/features

क्या कोई ऐसा तरीका है जिससे मैं खोज शब्द और क्वेरी संस्करण को एक अच्छे क्रम में रख सकूं?

धन्यवाद साइमन

जवाबों:


7

खोज फिर से लिखना नियमों को संशोधित करने के लिए आप search_rewrite_rulesफ़िल्टर में हुक कर सकते हैं । आप या तो पोस्ट प्रकार से मेल खाने वाले अतिरिक्त पुनर्लेखन नियमों को जोड़ सकते हैं, या आप पोस्ट प्रकार को शामिल करने के लिए डिफ़ॉल्ट "खोज पुनर्लेखन संरचना" को बदल सकते हैं और फिर नियमों को फिर से उत्पन्न कर सकते हैं (चार नियम हैं: एक मानक, पेजिंग वाला एक और दो फीड के लिए)। क्योंकि WP_Rewrite::generate_rewrite_rules() हर "डायरेक्टरी लेवल" पर नियम बनते हैं , आपको नियम मिलेंगे /search/[keyword]/section/[post_type]/, /search/[keyword]/section/और /search/[keyword]/। आपको मध्य नियम की आवश्यकता नहीं है, लेकिन इसे रखने के लिए चोट नहीं पहुंचेगी।

add_filter( 'search_rewrite_rules', 'wpse15418_search_rewrite_rules' );
function wpse15418_search_rewrite_rules( $search_rewrite_rules )
{
    global $wp_rewrite;
    $wp_rewrite->add_rewrite_tag( '%post_type%', '([^/]+)', 'post_type=' );
    $search_structure = $wp_rewrite->get_search_permastruct();
    return $wp_rewrite->generate_rewrite_rules( $search_structure . '/section/%post_type%', EP_SEARCH );
}

नियमों की जांच करने के लिए, मेरे रीवेरिट विश्लेषक प्लग इन का उपयोग करें ।

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