J'ai besoin de créer une variable accessible à travers mes fichiers de modèles WordPress Theme (index.php, header.php etc.). Je sais que les définitions de fonction vont à l'intérieur du functions.php
fichier de modèle (dans votre chemin d'accès au thème), mais il n'y a rien de tel pour les variables.
Par exemple, j'ai constamment besoin de récupérer des catégories dans mon thème, donc je voudrais que cela soit accessible de n'importe où dans mon thème:
$categories = get_categories(); /* get_categories() is a wordpress function */
De cette façon, je peux simplement accéder aux données allouées, sans avoir à les réallouer chaque fois que j'ai besoin d'obtenir mes catégories.
Malheureusement, l'ajout de ce morceau de code dans mon functions.php
fichier ne fonctionne pas, ni la création de la variable global
.
require()
déclarations qui sont enveloppées dans des fonctions:get_header()
,get_footer()
, etc; qui sont eux-mêmes des enveloppes autour de la fonctionget_template_part()
. Étant donné que les fonctions en PHP n'ont accès qu'aux variables définies en leur sein ou transmises par référence à celles-ci, si vous souhaitez utiliser une variable de la portée globale (ou définir une variable et la rendre accessible dans la portée globale), vous devez l'annoncer. avec le mot-clé global en premier.Dominic (ne sait pas comment ajouter une note à sa réponse):
définir accepte uniquement les scalaires, donc vous ne pouvez pas le faire
define( CATS, get_categories() );
et même pasSinon, définir fonctionne correctement, et c'est en fait plus sûr pour les scalaires (car vous pouvez être sûr que les constantes ne peuvent pas être écrasées)
la source
Je sais que celui-ci est vraiment ancien, mais il y a place à amélioration.
Vous devriez envisager d'utiliser $ GLOBALS ['categories'] au lieu de simplement global.
Il y a deux raisons à cela:
global $categories;
chaque fois.Considérez ce code:
Ce n'est que si nous initialisons l'état global juste avant d'utiliser une variable, qu'il est assez difficile de dire s'il est global ou non. Et n'oubliez pas de le répéter dans l'un des fichiers de modèle que vous avez.
Il est possible d'utiliser des conventions de dénomination pour cela, mais il y a une meilleure façon, à mon avis.
Pensez à utiliser
$GLOBALS['categories']
.Nous n'avons qu'à initialiser notre variable une fois dans functions.php sans avoir à y repenser
global $categories
. Et nous pouvons voir que c'est mondial.print_r ($GLOBALS['categories']);
Le problème de performance n'est pas du tout un problème dans cette situation. Je vais citer Sara Golemon ( lien ):
la source
Cela fonctionne également:
dans functions.php ajouter
define('TEST', 'this is a test');
et dans votre header.php ou autre
echo TEST;
Y a-t-il un avantage de performance à une méthode par rapport à une autre?
la source