web-dev-qa-db-fra.com

Pourquoi déclarer $ post globalement?

Je suis nouveau dans le développement Wordpress et je vois partout des exemples qui ont une ligne pour déclarer explicitement la variable $ post via:

global $post;

Mais j'ai testé mes utilisations sans cette ligne et cela ne fait aucune différence notable.

Pourquoi devriez-vous déclarer $ post explicitement?

4
saricDen

Dans le tutoriel (Exemple 1), il doit déclarer le $ post global pour pouvoir accéder au post_parent à partir de celui-ci. Dans une fonction comme ça, le $ post n'est pas une variable globale à moins qu'il ne le rende ainsi.

Dans le codex (Exemple 2), il est déclaré global parce que l'exemple de code est juste un exemple, essayant explicitement de vous indiquer que la variable $ post est globale.

Désormais, alors que les modèles de thèmes sont inclus de telle manière qu'ils s'exécutent dans l'espace de variable global (ils sont inclus à partir du fil d'exécution principal, et non à l'intérieur d'une fonction), il est possible que d'autres codes ne le soient pas. Ainsi, dans le corps principal d’un modèle, vous n’auriez pas besoin de spécifier global $post, mais vous le feriez dans une fonction.

Comprenez également que WordPress est destiné aux programmeurs de tous niveaux. Vous ne devriez pas avoir besoin d'être programmeur principal pour pouvoir faire avancer les choses lorsque votre objectif est simplement de modifier votre thème, votre site Web ou quelque chose du genre. WordPress est passé d’un élément de code procédural de base à une approche orientée objet et à une API basée sur le temps. Il y a donc des reliques comme celles-ci dans la base de code. Si vous conceviez un nouveau système à partir de la base, vous éviteriez probablement d'utiliser entièrement les variables globales, pour diverses raisons. WordPress en contient beaucoup pour des raisons de compatibilité ascendante et autres, et les "nouveaux" programmeurs qui ne comprennent peut-être pas la portée variable peuvent être confus quand ils copient un petit morceau de code dans un endroit où cela ne fonctionnera pas. Ainsi, déclarer des choses globales évite explicitement les problèmes et clarifie le code en indiquant que la variable en question est dans la portée globale.

De plus, et je dois le dire souvent, les exemples de code dans la documentation et les didacticiels doivent être lus et compris, pas copiés et collés. Mais les gens les copient et les collent, peu importe. Il est préférable de ne pas copier le code, mais d’apprendre ce qu’il vous dit, puis d’écrire votre propre version à partir de zéro, ce qui fait exactement ce que vous essayez de faire.

11
Otto

La variable globale $post est définie par $wp_query->the_post() ( WP_Post ) à l'intérieur de la boucle et est accessible pendant la boucle. $post contient les données de publication de la publication actuelle.

Lorsque vous êtes dans la boucle, vous n'avez pas besoin d'appeler le $post global car il est déjà accessible. Lorsque vous êtes à l'extérieur de la boucle et que vous devez accéder aux données de publication, vous devez utiliser le $post global pour rendre les données de publication disponibles.

7
Pieter Goosen