Une façon d'utiliser $query->set('tax_query', ...)
dans le filtre pre_get_posts
? Par exemple, le code suivant ne modifie pas la requête. Notez que je construis des taxonomies $ et une recherche personnalisée.
function custom_search_filter($query) {
...
// array('taxonomy' => 'category', 'field' => 'id', 'terms' => array( 41,42 ), 'operator' => 'IN')
$taxonomies = implode(',', $taxonomy_arr);
// https://wordpress.stackexchange.com/questions/25076/how-to-filter-wordpress-search-excluding-post-in-some-custom-taxonomies
$taxonomy_query = array('relation' => 'AND', $taxonomies);
$query->set('tax_query', $taxonomy_query);
}
return $query;
}
add_filter( 'pre_get_posts', 'custom_search_filter', 999 );
Merci d'avance.
La variable $query
du filtre représente un objet WP_Query
; vous ne devez donc pas transmettre un nouvel objet WP_Query
à la méthode permettant de définir les propriétés de cet objet.
La question à partir de laquelle vous avez copié le code utilisait incorrectement le filtre, ce qui, à mon avis, est le noeud de votre problème.
Oui, tax_query
peut être utilisé dans un filtre/action pre_get_posts
(ou similaire parse_request
).
Voici un exemple:
Spécifier une taxonomie personnalisée pour les requêtes de recherche
function search_filter_get_posts($query) {
if ( !$query->is_search )
return $query;
$taxquery = array(
array(
'taxonomy' => 'career_event_type',
'field' => 'id',
'terms' => array( 52 ),
'operator'=> 'NOT IN'
)
);
$query->set( 'tax_query', $taxquery );
}
add_action( 'pre_get_posts', 'search_filter_get_posts' );
Les requêtes fiscales nécessitent que vous définissiez également l'objet tax_query dans la requête, car celle-ci a déjà été analysée. Voir ma réponse pour Modifier les pages de taxonomie pour exclure les éléments des taxonomies enfants .