web-dev-qa-db-fra.com

Quels sont les inconvénients de l'utilisation de variable globale?

Je suis un débutant chez WordPress. Dans mon shortcode "posts récents", j'ai utilisé la variable global $post, car la fonction the_title() me donnait le titre de la page, pas le titre du message. Je ne suis pas tout à fait sûr, mais je pensais que c'était à cause d'une boucle à l'intérieur d'une boucle.

Certains utilisateurs avancés ici me disent de ne pas utiliser la variable global, aussi utiliser la variable global $post dans mon shortcode "posts récents" est-il bon ou non?

1
Sodbileg Gansukh

La variable global$post sera définie sur la première publication de la requête principale. Lorsqu’une boucle est exécutée (en supposant qu’elle soit construite correctement), qu’il s’agisse de la boucle principale ou d’un nombre quelconque de boucles secondaires, $post sera paramétré pour chaque publication de cette/ces boucles à son tour. À la fin de la boucle, il sera défini sur le dernier message de la dernière boucle. Les fonctions wp_reset_query et wp_rest_postdata aident à résoudre ce problème dans de nombreux cas. .

Je suis à peu près sûr que le problème réside dans la construction de votre "boucle à l'intérieur d'une boucle", mais vous ne postez pas le code, il est donc difficile de deviner. Je suppose que vous avez quelque chose comme:

$recent = get_posts(/*...*/);
foreach ($recent as $r) {
  the_title();
}

Et vous avez besoin de:

$recent = new WP_Query(/*...*/);
if ($recent->have_posts()) {
  while($recent->have_posts()) {
    $recent->the_post();
    the_title();
  }
}
wp_reset_postdata();
1
s_ha_dum

L'inconvénient est que global $post peut vous donner des résultats inattendus, à moins que vous ne soyez sûr de rester dans la boucle.

Les widgets et autres plug-ins peuvent rembobiner vos publications, passer d'une publication à une autre, ainsi que d'autres actions pouvant vous amener à obtenir des résultats que vous ne souhaitiez pas ou n'attendiez pas.

Puisque vous ne nous dites pas où votre shortcode est exécuté, il est possible que ce soit en dehors de la boucle et que des résultats inattendus se produisent.

Si votre shortcode est censé répertorier les publications récentes, il ne s'agit certainement pas de la bonne application de global $post - vous devez étudier Écrire une boucle personnalisée afin de récupère les posts récents, sans affecter la boucle principale.

2
cale_b