web-dev-qa-db-fra.com

Définir un tableau global dans functions.php?

J'essaie de créer un tableau d'années, ce qui est disponible dans mes fichiers de modèles et dans au moins une autre fonction du fichier functions.php.

function get_the_years() 
{
    global $year_arr = range(2001, date('Y'));
    return $year_arr;
}

Ensuite, je veux l'utiliser dans une fonction qui crée un terme pour chaque année dans la taxonomie personnalisée "année".

function create_year_terms() {
foreach($year_arr as $value){   
    $term = term_exists($value, 'year');
        if ($term !== 0 && $term !== null) {
            echo $value . ' category exists!';
        }
        else { wp_insert_term(
            $value, // the term 
            'year', // the taxonomy
            array(
                'description'=> 'The name of a year',
                'slug' => $value )
            );
            echo'term '. $value . ' created';
        }
    }

}

Et en essayant d’attacher cette fonction au hook wp_login

add_action('wp_login', 'create_year_terms');

J'ai essayé de faire mon travail et je suppose que je comprends "quelque chose" mais j'ai un peu peur de tuer quelque chose en mettant de mauvaises choses dans mes functions.php, donc veuillez excuser ma question.

1
schwarzgrau

Pour accéder à une variable définie dans la portée global, vous devez la référencer avec le mot clé global où que vous souhaitiez l'appeler à nouveau.

Dans votre cas, la fonction create_year_terms() doit appeler le global $year_arr dans son étendue.

En outre, vous pouvez toujours obtenir votre variable dans la portée global en utilisant le tableau $GLOBALS avec le nom de votre variable sous la forme key, en tant que tel:

$GLOBALS["year_arr"]

Mettre à jour

En ce qui concerne votre décision concernant le hook: Tout d’abord, il est préférable de placer ce type de code dans un plug-in plutôt que dans les fonctions de thème. Deuxièmement, accrochez-le sur init; ou enregistrez un hook d’activation pour votre plugin et utilisez ensuite peut-être wp_schedule_event avec un intervalle personnalisé d’un an.

… Mais encore une fois, est-ce vraiment nécessaire?

2
Sunyatasattva

Tout d'abord, vous devez définir une variable globale dans la portée, où vous souhaitez y accéder, c'est-à-dire en dehors de vos fonctions (et peut-être même en dehors de la classe - si vous en avez une.

Deuxièmement, pour autant que je sache, vous devez d'abord "rendre" une variable globale, puis, dans une nouvelle ligne, définir sa valeur:

global $myvar;
$myvar = "whatever";

Dans les fonctions, vous devez à nouveau déclarer la variable comme globale avant de l’utiliser. Sinon, il s'agirait simplement d'une variable locale portant le même nom que la variable globale (mais pas encore connue) de la variable 'outside'.

Et qu'est-ce que vous voulez faire avec la fonction? Connaissez-vous le crochet?

wp_login est obsolète - utilisez wp_signon. Mais je ne comprends pas ce que vous êtes prêt à faire ...

1
tfrommen