Escopo de variáveis do tema WordPress

8

Eu preciso criar uma variável que possa ser acessada em todos os meus arquivos de modelo do tema WordPress (index.php, header.php etc.). Eu sei que as definições de função estão dentro do arquivo functions.php template (no caminho do seu tema), mas não existe tal coisa para variáveis.

Por exemplo, preciso constantemente recuperar Categorias no meu tema, por isso gostaria de ter isso acessível em qualquer lugar do meu tema:

$categories = get_categories(); /* get_categories() is a wordpress function */ 

Dessa forma, posso simplesmente acessar os dados alocados, sem precisar realocá-los toda vez que preciso das minhas categorias.

Infelizmente adicionar esse trecho de código no meu arquivo functions.php não funciona, nem a variável global .

    
por Goncalo Peres 06.11.2009 / 15:16

4 respostas

5

Aparentemente, global faz o truque. O problema era que minha variável $categories deveria ter sido redefinida com um global na frente dela, em cada modelo eu precisava usá-la.

    
por Luca Matteis 06.11.2009 / 15:36
1

Dominic (não sabe como adicionar uma nota à sua resposta):

define apenas aceita escalares, então você não poderia fazer %código% e nem mesmo

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

Caso 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 sobrescritas)

    
por fritzfromlondon 26.07.2011 / 22:24
0

Isso também funciona:

em functions.php add define('TEST', 'this is a test');
e no seu header.php ou qualquer que seja o echo TEST;

Existe alguma vantagem no desempenho de um método em relação ao outro?

    
por Dominic 30.11.2010 / 16:35
0

Eu sei que este é muito antigo, mas há espaço para melhorias.

Você deve considerar o uso de $ GLOBALS ['categories'] em vez de apenas global.

Existem duas razões para isso:

  1. Não precisamos escrever global $categories; toda vez.
  2. É claro como cristal, então estamos usando global e depois não.

Considere este código:

global $categories;

// a lot of PHP code here

<?php print_r ($categories) ?>

Somente se inicializarmos o estado global antes de usar a variável, é bem difícil dizer se ela é global ou não. E não se esqueça de repeti-lo em qualquer arquivo de modelo que você tenha.

É possível usar convenções de nomenclatura para isso, mas existe uma maneira melhor, na minha opinião.

Considere usar $GLOBALS['categories'] .

Nós só temos que inicializar nossa variável uma vez em functions.php sem ter que pensar em global $categories novamente. E podemos ver que é global.

print_r ($GLOBALS['categories']);

O problema de desempenho não é um problema nessa situação. Vou citar Sara Golemon ( link ):

  

O que isso significa para o uso do array $ GLOBALS? Está certo,   a palavra-chave global é tecnicamente mais rápida. Agora eu quero ser realmente   claro sobre uma coisa aqui. A menor velocidade disponível dada pelo uso de   seus globais como localizados [variáveis compiladas] precisam ser seriamente   pesou contra a capacidade de manutenção de olhar para o seu código em cinco   anos e sabendo que $ foo veio do escopo global.   something_using ($ GLOBALS ['foo']); SEMPRE será mais claro para você   a linha que é global $ foo; / * código buncha * / something_using ($ foo);   Não seja penny-wise e libra tola ..

    
por Keeprock 02.07.2015 / 10:33