เพิ่มลิงก์ถาวรสำหรับผลลัพธ์การค้นหาด้วยคำค้นพิเศษ


10

ฉันต้องการทราบว่าฉันสามารถเขียน URL การค้นหาที่มี var การสืบค้นเพิ่มเติมลงใน Permalink ที่ใช้wp_redirectและtemplate_redirecthook ได้อย่างไร

ฉันนำโค้ดจากปลั๊กอินNice Searchซึ่งใช้งานได้ดีมาเปลี่ยน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_typevar http://example.com?s=africa&post_type=featuresแบบสอบถามเช่น ฉันจะชอบที่จะมีบางสิ่งบางอย่าง URL http://example.com/search/africa/section/featuresเช่น

โค้ด Nice Search ทำให้ var คิวรีของ 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();
    }

}

แต่ตอนนี้คิดว่า WordPress africa/section/featuresคำค้นหาที่เป็น

มีวิธีที่ฉันสามารถเก็บข้อความค้นหาและแบบสอบถามได้ทั้งหมดในลิงก์ถาวรหรือไม่

ขอบคุณ Simon

คำตอบ:


7

หากต้องการแก้ไขกฎการเขียนsearch_rewrite_rulesซ้ำการค้นหาคุณสามารถขอลงในตัวกรอง คุณสามารถเพิ่มกฎการเขียนซ้ำพิเศษที่จับคู่ประเภทโพสต์ด้วยตัวคุณเองหรือคุณสามารถเปลี่ยน "โครงสร้างการเขียนซ้ำการค้นหา" เริ่มต้นเพื่อรวมประเภทโพสต์แล้วสร้างกฎใหม่อีกครั้ง (มีกฎ 4 ข้อ: มาตรฐานหนึ่งข้อ และอีกสองฟีด) เพราะ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 );
}

หากต้องการตรวจสอบกฎระเบียบที่ใช้ปลั๊กอินวิเคราะห์ของฉัน Rewrite

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.