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