J'ai une barre de recherche sur 2 pages de mon site et sur ma page appelée archive, je souhaite exclure une catégorie appelée économie (id-9) de la recherche. J'ai placé ceci dans mon fichier functions.php:
function archive_search_filter( $query ) {
if ( $query->is_search && $query->is_main_query() ) {
$query->set( 'category__not_in' , '9' );
}
}
add_filter( 'pre_get_posts', 'archive_search_filter' );
et cela fonctionne parfaitement, mais je veux que cela soit uniquement implémenté sur la page appelée archive Si j'essaie une instruction if avec is_page ('archive') en même temps, cela ne fonctionne pas et je ne suis pas sûr d'une solution. Je me demande si le fichier functions.php se charge avant de pouvoir indiquer de quelle page il s’agit et s’il existe un autre moyen de le faire fonctionner.
Le problème est que pre_get_posts
est appelé after vous quittez la page, vous devez donc également vérifier si la recherche a été effectuée à partir de là et vous pouvez utiliser wp_get_referer()
Donc (en théorie, désolé je n’ai pas le temps de le tester) vous pourriez avoir
if ( !is_admin() && $query->is_search() && $query->is_main_query() && wp_get_referer() == "http://www.example.com/archive" ) {
J'espère que cela pourra aider
PS: Ajoutez toujours un contrôle !is_admin()
pour vous assurer que vous ne faites pas des requêtes de l'administrateur ... ceinture et accolades!
S'il vous plaît essayez le code suivant.
function archive_search_filter( $query ) {
if ( ! is_admin() && is_page( 'archive' ) ) {
$query->set( 'category__not_in' , '9' );
}
}
add_filter( 'pre_get_posts', 'archive_search_filter' );