J'utilise pre_get_posts()
pour permettre à tous les messages d'être affichés sur toutes les catégories d'archives. En effet, je vais fournir une méthode de tri et de filtrage javascript à l'aide d'isotope.js. Toutes les pages de catégorie afficheront tous les articles, mais celles qui ne font pas partie de cette catégorie seront initialement masquées.
function show_all_cats( $query ) {
if ( !$query->is_main_query() ){
return;
}
if ( is_admin() ){
return;
}
if ( $query->is_archive ) {
$query->set('cat', ''); //here is the problem
var_dump($query);
return;
}
return;
}
add_action( 'pre_get_posts', 'show_all_cats' );
J'ai essayé de régler 'cat'
à 0
, null
, ''
et '-' . $currentcategoryid
. Ils affichent tous uniquement des messages qui seraient affichés autrement (tous dans la catégorie) ou aucun.
J'ai essayé d'utiliser query_posts()
qui n'a pas fonctionné non plus. On m'a aussi dit:
la manipulation des taxonomies peut nécessiter de réexécuter le traitement des méta-requêtes.
Désactiver la variable cat n'est probablement pas suffisant. Le hook pre_get_posts
se produit après que les variables de requête ont déjà été analysées. Donc, il y a probablement une tax_query avec la taxonomie = catégorie et les termes = votre catégorie.
Vous êtes déjà en train de décharger la requête $ dans votre code, probablement pour le débogage. Alors, regardez ce que vous êtes en train de dumping. Voyez-vous le tax_query? Changez votre code pour ajuster cette requête $ pour avoir ce que vous voulez.
Avez-vous essayé cela?
unset( $query->query_vars['cat'] );
C'est environ 4 ans plus tard, mais si quelqu'un a besoin de réponse, c'est la solution:
if ( $query->is_archive ) {
$q->set( 'category_name', '*your-category-slug*' );
}
À votre santé
Vous pouvez utiliser un filtre pre_get_posts()
pour modifier la partie WHERE de la requête SQL:
add_filter( 'posts_where', function ( $where ) {
$where = preg_replace("regex pattern", "", $where);
return $where;
}, 10, 2 );
C'est un peu la solution de piratage mais devrait fonctionner.