web-dev-qa-db-fra.com

Identifiez la boucle dans laquelle vous êtes accroché; primaire ou secondaire?

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?

3
mwaterous

Juste une mise à jour rapide indiquant qu'une nouvelle méthode is_main_query() a été introduite dans WP 3.3.

Exemple:

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' );
}

Ressources:

5
Michal Mau

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.

0
Chip Bennett