Supprimer certaines pages de la recherche

8

Sur mon site, je veux que certaines pages ne soient pas consultables par le formulaire de recherche (donc elles n'apparaissent pas quand 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 simplement faire aveuglément une condition si is_page (id), afficher: aucun)

Fredy31
la source

Réponses:

14

Dans WP_Query (), il y a un argument 'post__not_in' où vous pouvez exclure des ID de publication spécifiques.

Vous devez créer un nouveau WP_Query à l'intérieur de votre search.php et utiliser les $ query_args actuels, puis ajouter votre 'post__not_in'.

Si vous vouliez le rendre plus dynamique, vous pouvez également créer des méta post où vous pouvez faire 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);
    }

}
Eric Holmes
la source
3
+1. Ajoutera que si les messages que vous excluez appartiennent à un type de message particulier, vous pouvez les exclure de la recherche lorsque vousregister_post_type
Stephen Harris
1

Pour exclure toutes les pages des résultats de recherche (c'est-à-dire sans avoir à fournir manuellement les ID de page), voici une version améliorée de la fonction de @ 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 );

    }
}

Plus d'informations:

(ALTERNATIVE) Bien que, compte tenu de ce que vous faites, vous pouvez simplement définir exclude_from_searchle pagetype de publication sur true, ce qui me semble être le meilleur moyen d'exclure un type de publication de la recherche. Voir la réponse de @ prettyboymp pour cela .

Plus d'informations:

c'est moi
la source