¿Cómo definir un array global en functions.php?
Intento crear un array de años que esté disponible en mis archivos de plantilla y al menos en otra función dentro de functions.php.
function get_the_years()
{
global $year_arr = range(2001, date('Y')); // Crea un array desde 2001 hasta el año actual
return $year_arr;
}
Luego quiero usarlo en una función que crea un término para cada año en la taxonomía personalizada 'year'.
function create_year_terms() {
foreach($year_arr as $value){
$term = term_exists($value, 'year');
if ($term !== 0 && $term !== null) {
echo $value . ' ¡la categoría existe!';
}
else { wp_insert_term(
$value, // el término
'year', // la taxonomía
array(
'description'=> 'El nombre de un año',
'slug' => $value )
);
echo 'término '. $value . ' creado';
}
}
}
Y tratando de adjuntar esta función al hook wp_login
add_action('wp_login', 'create_year_terms');
He intentado hacer mis tareas y creo que entiendo "algo", pero me da un poco de miedo estropear algo al poner cosas incorrectas en mi functions.php, así que disculpen mi pregunta.
Para acceder a una variable definida en el ámbito global
, debes hacer referencia a ella con la palabra clave global
donde quieras usarla nuevamente.
En tu caso, la función create_year_terms()
debe llamar a global $year_arr
dentro de su ámbito.
Además, siempre puedes obtener tu variable en el ámbito global
usando el array $GLOBALS
con el nombre de tu variable como key
, así:
$GLOBALS["year_arr"]
Actualización
En cuanto a tu decisión sobre el hook: En primer lugar, es una buena práctica poner este tipo de código en un plugin en lugar de en las funciones del tema. En segundo lugar, enganchalo a init
; o registra un hook de activación para tu plugin y luego quizás uses wp_schedule_event con un intervalo personalizado de un año.
…pero de nuevo, ¿es realmente necesario?

wp_schedule_event es un consejo realmente bueno. Desafortunadamente supongo que es necesario. Hice un sitio web para el departamento de cine de mi universidad. Y mientras siga estudiando administraré el sitio, pero debería seguir funcionando si alguien más se encarga de él.

Primero, debes definir una variable global en el alcance donde deseas tener acceso a ella, es decir, fuera de tus funciones (y tal vez incluso fuera de la clase, si tienes una).
En segundo lugar, hasta donde sé, primero debes 'declarar' una variable como global y luego, en una nueva línea, asignarle su valor:
global $mivar;
$mivar = "lo que sea";
Dentro de las funciones, debes declarar la variable nuevamente como global antes de usarla. De lo contrario, sería solo una variable local con el mismo nombre que la variable global (pero aún no conocida) del 'exterior'.
¿Y qué es exactamente lo que quieres hacer con la función? ¿Conoces el hook?
wp_login
está obsoleto - usa wp_signon
. Pero no entiendo lo que estás tratando de hacer...

gracias por la aclaración sobre el uso de global. La función debería verificar si ya existe un término personalizado con el año actual, si no existe, crearlo. Elegí wp_login, porque hasta donde sé no hay un hook que se ejecute cada 1 de enero o algo similar que podría usar.
