J'ai juste fait une action sur la requête en utilisant pre_get_posts
et cela n'a pas fonctionné. Quand j'ai enlevé la $query->is_main_query()
cela a fonctionné.
Alors, comment savez-vous quelle est la requête principale? Je sais qu'il existe la fonction is_main_query
. Ce que je demande, y at-il un moyen de dire lequel vous regardez? Comment WordPress sait-il laquelle est la requête principale? Si vous en avez trois ou quatre pour différentes raisons, telles que catégories, types d'articles, pages. quel est le principal?
La méthode source WP_Query->is_main_query()
(qui appelle les mêmes noms) est très simple et très courte:
function is_main_query() {
global $wp_the_query;
return $wp_the_query === $this;
}
La requête principale est la requête stockée dans $wp_the_query
global. Mais quel est ce global? Lorsque WP configure la requête principale, il la stocke à deux emplacements: $wp_the_query
et $wp_query
. Ce dernier est plus connu car cette variable correspond à ce que vous utilisez habituellement pour travailler avec la requête principale et ce que query_posts()
change.
Cependant, query_posts()
fonctionne comme ceci:
function query_posts($query) {
$GLOBALS['wp_query'] = new WP_Query();
return $GLOBALS['wp_query']->query($query);
}
Il coupe le lien entre $wp_query
et $wp_the_query
. Et l’inverse peut être effectué par wp_reset_query()
pour rétablir que:
function wp_reset_query() {
$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];
wp_reset_postdata();
}
La requête principale est donc celle que WP a configurée pendant le chargement principal.
Il s'agit généralement de ce que $wp_query
contient, à moins qu'il n'ait été modifié pour ne plus être la requête principale.