web-dev-qa-db-fra.com

exclure une catégorie d'une recherche sur une page spécifique

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.

1
jessica mele

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!

1
Peter HvD

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' );
1
obiPlabon