Comment exclure le modèle de page wordpress (modèle personnalisé) des résultats de recherche ?
J’ai créé un modèle de page personnalisé.
<?php
/*
* Template Name: foo
*/
?>
Ce nom de fichier est « foo.php ».
j’ai essayé
global $query_string;
query_posts($query_string . "&post_type=post");
Mais toutes les pages seront exceptées….
Comment exclure uniquement ce modèle de page des résultats de recherche wordpress ?
Solution n°1 trouvée
Pour tous ceux qui trébuchent sur ce fil et ne réussissent pas sur les nouvelles versions de WP : les arguments $query doivent être définis à la place en refaisant query_posts… comme suit :
// exclude any content from search results that use specific page templates
function exclude_page_templates_from_search($query) {
global $wp_the_query;
if ( ($wp_the_query === $query) && (is_search()) && ( ! is_admin()) ) {
$query->set(
'meta_query',
array(
array(
'key' => '_wp_page_template',
'value' => 'page-template-1.php',
'compare' => '!='
)
)
);
}
}
add_filter('pre_get_posts','exclude_page_templates_from_search');
Solution n°2 trouvée
La requête mentionnée par Nicolay est très pratique, mais elle supprime également tous les messages des résultats de la recherche, car les messages ne contiennent pas la '_wp_page_template'
clé. Pour avoir toutes les pages (sans le modèle filtré) ainsi que tous les articles, vous devez procéder comme suit :
// exclude any content from search results that use specific page templates
function exclude_page_templates_from_search($query) {
global $wp_the_query;
if ( ($wp_the_query === $query) && (is_search()) && ( ! is_admin()) ) {
$meta_query =
array(
// set OR, default is AND
'relation' => 'OR',
// remove pages with foo.php template from results
array(
'key' => '_wp_page_template',
'value' => 'foo.php',
'compare' => '!='
),
// show all entries that do not have a key '_wp_page_template'
array(
'key' => '_wp_page_template',
'value' => 'page-thanks.php',
'compare' => 'NOT EXISTS'
)
);
$query->set('meta_query', $meta_query);
}
}
add_filter('pre_get_posts','exclude_page_templates_from_search');
Des informations détaillées à ce sujet peuvent être trouvées dans le WordPress Codex.
Solution n°3 trouvée
Essaye ça:
global $wp_query;
$args = array_merge($wp_query->query, array(
'meta_query' => array(
array(
'key' => '_wp_page_template',
'value' => 'foo.php',
'compare' => '!='
)
),
));
query_posts( $args );
0 commentaire