Pourquoi while()
est-il utilisé au lieu de dire if()
ici:
<?php while ( have_posts() ) : the_post(); ?>
<?php get_template_part( 'content', 'single' ); ?>
<?php _s_post_nav(); ?>
<?php
// If comments are open or we have at least one comment, load up the comment template
if ( comments_open() || '0' != get_comments_number() ) :
comments_template();
endif;
?>
<?php endwhile; // end of the loop. ?>
Donc, je le vois depuis toujours et je l’utilise aussi parce que c’est ce que Wordpress utilise par défaut. Cependant, aujourd’hui, je me sens un peu plus curieux que d’habitude - pourquoi est-il utilisé au lieu de si? Est-ce que je m'attends à recevoir plus d'un message en une seule vue?
https://github.com/Automattic/_s/blob/master/page.php#L18https: //github.com/Automattic/_s/blob/master/single.php#L13
Comme , le codex WordPress pour have_posts
indique:
En tant qu'effet secondaire, have_posts démarre, passe ou réinitialise la boucle. À la fin de la boucle, have_posts renvoie 0 après avoir appelé rewind_posts.
En regardant la source telle qu’elle se présente aujourd’hui: en plus de l’appel à rewind_posts()
, il déclenche également l’action loop_end
(sur laquelle les plug-ins peuvent compter) ainsi que de définir un drapeau pour que in_the_loop()
renvoie correctement la valeur false par la suite.
Donc, appeler have_posts()
à chaque itération ne fait pas que renvoyer un booléen. Je ne voudrais pas trop m'appuyer sur les détails de la source car c'est un objet en mouvement. Il suffit de comprendre que d’autres tâches ménagères sont effectuées lorsque vous appelez have_posts()
jusqu’à ce qu’il renvoie false et que vous ayez moins de risques de créer des problèmes d’interopérabilité subtils si vous l’utilisez de cette manière, même si un seul poste est impliqué.
Vous devez être utilisé dans une publication unique ou une publication détaillée, car vous ne recevez pas le champ méta de la publication. Par exemple, vous avez un type de publication personnalisé tel que "Produit" du côté de l’administrateur et vous n’ajoutez que des champs personnalisés au produit (produits supplémentaires tels que prix, nombre, etc.). En bref, vous utilisez une boucle while que vous pouvez obtenir un champ supplémentaire, tel que get post meta, sinon vous ne pouvez pas obtenir de champ supplémentaire. C'est possible lorsque vous utilisez une boucle while en single.php