Khá permalinks cho kết quả tìm kiếm với var truy vấn bổ sung


10

Tôi muốn biết làm thế nào tôi có thể viết lại một URL tìm kiếm cũng chứa một var truy vấn bổ sung vào một permalink đẹp bằng cách sử dụng wp_redirecttemplate_redirecthook.

Tôi đã lấy mã từ plugin Nice Search hoạt động tốt để thay đổi http://example.com?s=africathành 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();
        }

    }

Nhưng tôi đang sử dụng một danh sách thả xuống được chọn kết hợp với plugin Relevanssi để cho phép khách truy cập thu hẹp tìm kiếm vào một loại bài đăng cụ thể. Điều này thêm một post_typevar truy vấn, ví dụ http://example.com?s=africa&post_type=features. Tôi muốn điều này để có một URL như thế nào http://example.com/search/africa/section/features.

Mã Nice Search khiến var truy vấn post_type bị mất. Vì vậy, tôi đã thử đoạn mã sau:

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();
    }

}

nhưng WordPress bây giờ nghĩ rằng thuật ngữ tìm kiếm là africa/section/features.

Có cách nào để tôi có thể giữ cụm từ tìm kiếm và var truy vấn trong một permalink đẹp không?

Cảm ơn Simon

Câu trả lời:


7

Để sửa đổi các quy tắc viết lại tìm kiếm, bạn có thể nối vào search_rewrite_rulesbộ lọc. Bạn có thể tự thêm các quy tắc viết lại phù hợp với loại bài đăng hoặc bạn có thể thay đổi "cấu trúc viết lại tìm kiếm" mặc định để bao gồm loại bài đăng và sau đó tạo lại quy tắc (có bốn quy tắc: một tiêu chuẩn, một quy tắc phân trang và hai cho thức ăn). Bởi vì WP_Rewrite::generate_rewrite_rules() tạo ra quy tắc ở mọi "cấp độ thư mục" , bạn sẽ nhận được quy tắc cho /search/[keyword]/section/[post_type]/, /search/[keyword]/section//search/[keyword]/. Bạn không cần quy tắc trung gian, nhưng sẽ không hại gì khi giữ nó.

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 );
}

Để kiểm tra các quy tắc, sử dụng plugin phân tích Rewrite của tôi .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.