Quel est le moyen le plus efficace de déterminer la boucle dans laquelle je suis?
J'ai quelques plugins qui modifient la requête en se connectant à différentes parties de WP_Query::get_posts()
, via les suspects habituels, à savoir posts_where
, posts_join
, etc . Cependant, je ne veux pas effectuer chaque boucle sur chaque page. Je lance donc un debug_backtrace()
et vérifie l’existence de the main()
ou query_posts()
fonctionne selon les besoins.
Il doit y avoir un moyen plus efficace d'identifier la boucle principale et les sous-boucles sur chaque page. Quelque chose me manque quand j'examine les vars de requête et d'autres aspects de la requête, quelque chose qui est unique pour chacun. Comment vous y prendriez-vous?
Juste une mise à jour rapide indiquant qu'une nouvelle méthode is_main_query()
a été introduite dans WP 3.3.
add_action( 'pre_get_posts', 'foo_modify_query_exclude_category' );
function foo_modify_query_exclude_category( $query ) {
if ( $query->is_main_query() && ! $query->get( 'cat' ) )
$query->set( 'cat', '-5' );
}
Si les boucles secondaires sont appelées correctement (c’est-à-dire qu’elles ne mouillent pas avec query_posts()
et définissent une variable $myloop
égale à get_posts()
ou new WP_Query
), l’identification de cette boucle est aussi simple que de référencer la variable.
Si vous devez appeler une deuxième boucle à partir de la boucle principale et que vous appelez setup_postdata()
dans la boucle secondaire, vous devrez peut-être appeler wp_reset_query()
lors de la fermeture de la boucle secondaire pour que vos balises de modèle reviennent à s'appliquer à la boucle principale.