Hapus beberapa halaman dari pencarian

8

Di situs saya, saya ingin beberapa halaman tidak dapat ditanyakan oleh form pencarian (jadi mereka tidak muncul ketika saya punya sesuatu seperti www.ex.com/?s=banana)

Apakah ada cara untuk "Hapus" halaman dari halaman hasil pencarian (tanpa hanya membabi buta kondisi is_page (id), tampilkan: tidak ada)

Fredy31
sumber

Jawaban:

14

Di WP_Query () ada argumen 'post__not_in' di mana Anda dapat mengecualikan ID pos tertentu.

Anda akan membuat WP_Query baru di dalam search.php Anda dan menggunakan $ query_args saat ini, kemudian menambahkan 'post__not_in' Anda.

Jika Anda ingin membuatnya lebih dinamis, Anda juga dapat membangun beberapa meta pos tempat Anda dapat melakukan kueri meta dan mengecualikan semua yang telah "mengecualikan" dicentang. (lihat 'register_meta_box_cb' di register_post_type ).

Sebagai contoh,

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

}
Eric Holmes
sumber
3
+1. Akan menambahkan bahwa jika posting yang Anda kecualikan termasuk dalam jenis posting tertentu maka Anda dapat mengecualikannya dari pencarian saat Andaregister_post_type
Stephen Harris
1

Untuk mengecualikan semua halaman dari hasil pencarian (yaitu tanpa harus secara manual memberikan ID halaman), berikut ini adalah versi perbaikan fungsi @ 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 );

    }
}

Info lebih lanjut:

(ALTERNATIF) Meskipun, mengingat apa yang Anda lakukan, Anda bisa mengatur exclude_from_searchuntuk pagejenis posting true, yang bagi saya tampaknya menjadi cara terbaik untuk mengecualikan jenis posting dari pencarian. Lihat jawaban @ prettyboymp untuk itu .

Info lebih lanjut:

ini aku
sumber