web-dev-qa-db-fra.com

Portée des variables du thème WordPress

J'ai besoin de créer une variable qui peut être consultée dans tous mes fichiers de modèles de thème WordPress (index.php, header.php, etc.). Je sais que les définitions de fonction vont dans le fichier de modèle functions.php (dans votre chemin de thème), mais cela n'existe pas pour les variables.

Par exemple, j'ai constamment besoin de récupérer des catégories dans mon thème. J'aimerais donc que ceci 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 je dois obtenir mes catégories.

Malheureusement, l'ajout de cette partie de code dans mon fichier functions.php ne fonctionne pas, pas plus que la variable global.

8
Luca Matteis

Apparemment, global fait l'affaire. Le problème était que ma variable $categories aurait dû être redéfinie avec un global devant celle-ci, dans chaque modèle je devais l'utiliser.

5
Luca Matteis

Dominic (je ne sais pas comment ajouter une note à sa réponse):

définir accepte uniquement les scalaires, vous ne pouvez donc pas utiliser define( CATS, get_categories() ); et même pas

$categories = get_categories();
define( CATS, $categories );

Sinon, definir fonctionne bien et est en fait plus sûr pour les scalaires (vous pouvez être sûr que les constantes ne peuvent pas être écrasées)

1
fritzfromlondon

Cela fonctionne aussi:

dans functions.php, ajoutez define('TEST', 'this is a test');
et dans votre header.php ou autre chose echo TEST;

Existe-t-il un avantage de performance d’une méthode par rapport à une autre?

0
Dominic

Je sais que celui-ci est vraiment vieux, mais il y a encore matière à amélioration.

Vous devriez envisager d'utiliser $ GLOBALS ['categories'] au lieu de simplement global.

Il y a deux raisons à cela:

  1. Nous n'avons pas à écrire global $categories; à chaque fois.
  2. Il est clair que nous utilisons global et que non.

Considérons ce code:

global $categories;

// a lot of PHP code here

<?php print_r ($categories) ?>

Seulement si nous initialisons l'état global juste avant d'utiliser une variable, il est assez difficile de dire si c'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 nommage pour cela, mais il existe un meilleur moyen, à mon avis.

Pensez à utiliser $GLOBALS['categories'].

Nous n'avons qu'à initialiser notre variable une fois dans functions.php sans avoir à penser à nouveau à global $categories. Et nous pouvons voir que c'est un problème mondial.

print_r ($GLOBALS['categories']);

Le problème de performance n’est pas du tout un problème dans cette situation. Je citerai Sara Golemon ( link ):

Qu'est-ce que cela signifie pour votre utilisation du tableau $ GLOBALS? C'est vrai, le mot clé global est techniquement plus rapide. Maintenant, je veux être très clair sur une chose ici. La moindre rapidité offerte en utilisant vos globals comme [variables compilées] localisées doit être sérieusement pesée par rapport à la possibilité de regarder votre code dans cinq ans et de savoir que $ foo est issu de l’envergure mondiale. quelque chose_using ($ GLOBALS ['foo']); sera TOUJOURS plus clair pour vous en bout de ligne que global $ foo;/* code buncha */quelque chose utilisant ($ foo); Ne soyez pas penny sage et pound idiot ..

0
Keeprock