web-dev-qa-db-fra.com

Supprimer des pages de la recherche

Sur mon site, je souhaite que certaines pages ne soient pas identifiables par le formulaire de recherche (afin qu'elles n'apparaissent pas lorsque j'ai quelque chose comme www.ex.com/?s=banana)

Existe-t-il un moyen de "supprimer" des pages de la page de résultats de recherche (sans faire aveuglément une condition de if is_page (id), display: none)

8
Fredy31

Dans WP_Query () , il existe un argument 'post__not_in' dans lequel vous pouvez exclure des ID de publication spécifiques.

Vous créez un nouveau WP_Query dans votre search.php et utilisez le $ query_args actuel, puis ajoutez votre "post__not_in".

Si vous souhaitez le rendre plus dynamique, vous pouvez également intégrer des méta-post où vous pouvez effectuer une méta-requête et exclure tous ceux qui ont "exclu" coché. (recherchez 'register_meta_box_cb' dans register_post_type ).

Par exemple,

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

}
14
Eric Holmes

Pour exclure toutes les pages des résultats de recherche (c'est-à-dire sans avoir à fournir manuellement les identifiants de page), il vous suffit de modifier la fonction de @ EricHolmes de la manière suivante:

add_action( 'pre_get_posts', 'wpse67626_exclude_posts_from_search' );
function wpse67626_exclude_posts_from_search( $query ) {
    if ( $query->is_main_query() && $query->is_search() ) {

        // Get an array of all page IDs with `get_all_page_ids()` function
        $query->set( 'post__not_in', get_all_page_ids() );

    }
}
1
its_me