Eu preciso criar uma variável que possa ser acessada nos meus arquivos de modelo de tema do WordPress (index.php, header.php etc.). Eu sei que as definições de função estão dentro do functions.php
arquivo de modelo (no caminho do seu tema), mas não existe tal coisa para variáveis.
Por exemplo, eu constantemente preciso recuperar Categorias no meu Tema, então eu gostaria de ter isso acessível de qualquer lugar no meu tema:
$categories = get_categories(); /* get_categories() is a wordpress function */
Dessa forma, eu posso simplesmente acessar os dados alocados, sem precisar realocá-los toda vez que precisar obter minhas categorias.
Infelizmente, adicionar esse pedaço de código no meu functions.php
arquivo não funciona, nem criar a variável global
.
require()
declarações que estão envolvidos em funções:get_header()
,get_footer()
, etc; que são invólucros em torno da funçãoget_template_part()
. Como as funções no PHP têm acesso apenas às variáveis definidas nelas ou passadas por referência a elas, se você deseja usar uma variável do escopo global (ou definir uma variável e torná-la acessível no escopo global), você deve anunciar com a palavra-chave global primeiro.Dominic (não sabe como adicionar uma nota à sua resposta):
define apenas aceita escalares, então você não poderia fazer
define( CATS, get_categories() );
e nem mesmoCaso contrário, definir funciona bem e é de fato mais seguro para escalares (como você pode ter certeza de que as constantes não podem ser substituídas)
fonte
Eu sei que este é realmente velho, mas há um espaço para melhorias.
Você deve considerar usar $ GLOBALS ['categorias'] em vez de apenas global.
Há duas razões para isso:
global $categories;
sempre.Considere este código:
Somente se inicializarmos o estado global antes de usar a variável, é muito difícil saber se é global ou não. E não se esqueça de repeti-lo em qualquer um dos arquivos de modelo que você possui.
É possível usar convenções de nomenclatura para isso, mas há uma maneira melhor, na minha opinião.
Considere usar
$GLOBALS['categories']
.Só precisamos inicializar nossa variável uma vez em functions.php sem precisar pensar
global $categories
novamente. E podemos ver que é global.print_r ($GLOBALS['categories']);
Problema de desempenho não é um problema nesta situação. Vou citar Sara Golemon ( link ):
fonte
Isso também funciona:
em functions.php add
define('TEST', 'this is a test');
e no seu header.php ou o que quer que seja
echo TEST;
Existe alguma vantagem de desempenho em um método em relação a outro?
fonte