Rimuovi alcune pagine dalla ricerca


8

Sul mio sito, desidero che alcune pagine non siano interrogabili dal modulo di ricerca (quindi non vengono visualizzate quando ho qualcosa come www.ex.com/?s=banana)

Esiste un modo per "Rimuovere" le pagine dalla pagina dei risultati della ricerca (senza fare ciecamente una condizione di if_page (id), display: none)

Risposte:


14

In WP_Query () esiste un argomento 'post__not_in' in cui è possibile escludere specifici ID post.

Dovresti creare un nuovo WP_Query all'interno del tuo search.php e utilizzare gli attuali $ query_args, quindi aggiungere il tuo 'post__not_in'.

Se volessi renderlo più dinamico, potresti anche inserire in alcuni meta meta dove potresti fare una meta query ed escludere tutto ciò che ha "escluso" controllato. (cerca 'register_meta_box_cb' in register_post_type ).

Per esempio,

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. Aggiungo che se i post che stai escludendo appartengono a un particolare tipo di post, puoi escluderli dalla ricerca quandoregister_post_type
Stephen Harris,

1

Per escludere tutte le pagine dai risultati di ricerca (ovvero senza dover fornire manualmente gli ID di pagina), ecco una versione migliorata della funzione di @ 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 );

    }
}

Ulteriori informazioni:

(ALTERNATIVO) Anche se, dato quello che stai facendo, potresti semplicemente impostare exclude_from_searchil pagetipo di post su true, che per me sembra essere il modo migliore per escludere un tipo di post dalla ricerca. Vedi la risposta di @ prettyboymp per questo .

Ulteriori informazioni:

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.