¿Cómo definir un array global en functions.php?

1 mar 2013, 02:48:17
Vistas: 27.4K
Votos: 1

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.

2
Comentarios

¿Cómo es esta pregunta específica de WordPress?

Chip Bennett Chip Bennett
1 mar 2013 02:56:31

Oh lo siento, no estoy muy familiarizado con PHP, esperaba que fuera específico de WordPress, por los hooks y términos personalizados creados.

schwarzgrau schwarzgrau
1 mar 2013 03:02:45
Todas las respuestas a la pregunta 2
1

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?

1 mar 2013 02:57:03
Comentarios

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.

schwarzgrau schwarzgrau
1 mar 2013 03:25:23
2

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...

1 mar 2013 03:02:45
Comentarios

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.

schwarzgrau schwarzgrau
1 mar 2013 03:09:09

¿Por qué harías eso? Actualicé mi respuesta anterior para abordar este problema.

Sunyatasattva Sunyatasattva
1 mar 2013 03:19:09