Xóa một số trang khỏi tìm kiếm


8

Trên trang web của tôi, tôi muốn một số trang không bị truy vấn bởi biểu mẫu tìm kiếm (vì vậy chúng không xuất hiện khi tôi có một cái gì đó như www.ex.com/?s=banana)

Có cách nào để "Xóa" các trang khỏi trang kết quả tìm kiếm (mà không cần mù quáng làm điều kiện if is_page (id), display: none)

Câu trả lời:


14

Trong WP_Query () có một đối số 'post__not_in' trong đó bạn có thể loại trừ ID bài đăng cụ thể.

Bạn sẽ tạo một WP_Query mới bên trong search.php của bạn và sử dụng $ query_args hiện tại, sau đó thêm vào 'post__not_in' của bạn.

Nếu bạn muốn làm cho nó năng động hơn, bạn cũng có thể xây dựng trong một số meta bài đăng nơi bạn có thể thực hiện một truy vấn meta và loại trừ tất cả những gì đã "loại trừ" được kiểm tra. (tra cứu 'register_meta_box_cb' trong register_post_type ).

Ví dụ,

add_action('pre_get_posts','wpse67626_exclude_posts_from_search');
function wpse67626_exclude_posts_from_search( $query ){

    if( $query->is_main_query() && is_search() ){
         //Exclude posts by ID
         $post_ids = array(7,19,21);
         $query->set('post__not_in', $post_ids);
    }

}

3
+1. Sẽ thêm rằng nếu các bài đăng bạn đang loại trừ thuộc về một loại bài đăng cụ thể thì bạn có thể loại trừ chúng khỏi tìm kiếm khi bạnregister_post_type
Stephen Harris

1

Để loại trừ tất cả các trang khỏi kết quả tìm kiếm (nghĩa là không phải cung cấp ID trang theo cách thủ công), đây là phiên bản cải tiến của chức năng @ EricHolmes:

add_action( 'pre_get_posts', 'wpse67626_exclude_pages_from_search' );
function wpse67626_exclude_pages_from_search( $query ) {

    // Manually supply Post/Page IDs to exclude from search results
    // $exclude_page_ids = array( 7, 19, 21 );

    // Or just get all page IDs
    $exclude_page_ids = get_all_page_ids();

    if (
        !$query->is_admin &&
        $query->is_search &&
        $query->is_main_query() &&
        !empty( $exclude_page_ids ) 
    ) {

        $query->set( 'post__not_in', $exclude_page_ids );

    }
}

Thêm thông tin:

(THAY ĐỔI) Mặc dù, với những gì bạn đang làm, bạn chỉ có thể đặt exclude_from_searchcho pageloại bài đăng true, mà theo tôi dường như là cách tốt nhất để loại trừ một loại bài đăng khỏi tìm kiếm. Xem câu trả lời của @ beautifulboymp cho điều đó .

Thêm thông tin:

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.