Necesito crear una variable a la que se pueda acceder a través de mis archivos de plantilla de tema de WordPress (index.php, header.php, etc.). Sé que las definiciones de funciones van dentro del functions.php
archivo de plantilla (en la ruta de su tema), pero las variables no existen.
Por ejemplo, constantemente necesito recuperar Categorías en mi Tema, por lo que me gustaría tener esto accesible desde cualquier parte de mi tema:
$categories = get_categories(); /* get_categories() is a wordpress function */
De esta manera, simplemente puedo acceder a los datos asignados, sin tener que reasignarlos cada vez que necesito obtener mis categorías.
Desafortunadamente, agregar ese fragmento de código en mi functions.php
archivo no funciona, tampoco lo hace la variable global
.
require()
las declaraciones que se envuelven en funciones:get_header()
,get_footer()
, etc; que son envoltorios alrededor de la funciónget_template_part()
. Como las funciones en PHP solo tienen acceso a las variables definidas dentro de ellas o pasadas por referencia a ellas, si desea utilizar una variable del ámbito global (o definir una variable y hacerla accesible en el ámbito global) debe anunciarla. con la palabra clave global primero.Dominic (no sé cómo agregar una nota a su respuesta):
define solo acepta escalares, por lo que no podría hacerlo
define( CATS, get_categories() );
y ni siquieraDe lo contrario, define funciona bien, y de hecho es más seguro para los escalares (ya que puede estar seguro de que las constantes no se pueden sobrescribir)
fuente
Sé que este es realmente viejo, pero hay un margen de mejora.
Debería considerar usar $ GLOBALS ['categorías'] en lugar de solo global.
Hay dos razones para esto:
global $categories;
.Considera este código:
Solo si inicializamos el estado global justo antes de usar la variable, es bastante difícil saber si es global o no. Y no olvide repetirlo en cualquiera de los archivos de plantilla que tenga.
Es posible usar convenciones de nomenclatura para eso, pero hay una mejor manera, en mi opinión.
Considera usar
$GLOBALS['categories']
.Solo tenemos que inicializar nuestra variable una vez en functions.php sin tener que pensar de
global $categories
nuevo. Y podemos ver que es global.print_r ($GLOBALS['categories']);
El problema de rendimiento no es un problema en absoluto en esta situación. Citaré a Sara Golemon ( enlace ):
fuente
Esto también funciona:
en functions.php add
define('TEST', 'this is a test');
y en su header.php o lo que sea
echo TEST;
¿Hay alguna ventaja de rendimiento para un método sobre otro?
fuente