Определение глобального массива в functions.php?
Я пытаюсь создать массив годов, который будет доступен в файлах шаблонов и как минимум в одной другой функции в functions.php.
function get_the_years()
{
global $year_arr = range(2001, date('Y')); // создаем массив от 2001 до текущего года
return $year_arr;
}
Затем я хочу использовать его в функции, которая создает термин для каждого года в пользовательской таксономии 'year'.
function create_year_terms() {
foreach($year_arr as $value){
$term = term_exists($value, 'year');
if ($term !== 0 && $term !== null) {
echo $value . ' категория существует!';
}
else { wp_insert_term(
$value, // термин
'year', // таксономия
array(
'description'=> 'Название года',
'slug' => $value )
);
echo 'термин '. $value . ' создан';
}
}
}
И пытаюсь прикрепить эту функцию к хуку wp_login
add_action('wp_login', 'create_year_terms');
Я старался сделать домашнее задание и вроде бы "что-то" понимаю, но немного боюсь что-то сломать, добавляя неправильный код в functions.php, поэтому прошу прощения за мой вопрос.

Для доступа к переменной, определённой в global
области видимости, вы должны ссылаться на неё с помощью ключевого слова global
везде, где хотите её вызвать снова.
В вашем случае функция create_year_terms()
должна вызывать global $year_arr
в пределах своей области видимости.
Также вы всегда можете получить свою переменную в global
области видимости, используя массив $GLOBALS
с именем вашей переменной в качестве key
, например:
$GLOBALS["year_arr"]
Обновление
Что касается выбора хука: во-первых, лучшей практикой будет помещать подобный код в плагин, а не в functions.php вашей темы. Во-вторых, используйте хук init
; или зарегистрируйте хук активации для вашего плагина, а затем, возможно, примените wp_schedule_event с пользовательским интервалом в один год.
…но снова возникает вопрос: действительно ли это необходимо?

Во-первых, вам нужно определить глобальную переменную в области видимости, где вы хотите иметь к ней доступ, то есть вне ваших функций (и, возможно, даже вне класса, если он у вас есть).
Во-вторых, насколько я знаю, сначала нужно объявить переменную как глобальную, а затем в новой строке присвоить ей значение:
global $myvar;
$myvar = "whatever";
Внутри функций вам снова нужно объявить переменную как глобальную, прежде чем использовать её. В противном случае это будет просто локальная переменная с тем же именем, что и глобальная (но ещё неизвестная) переменная из "внешней" области видимости.
И что именно вы хотите сделать с функцией? Вы знаете о хуках?
wp_login
устарел — используйте wp_signon
. Но я не совсем понимаю, что вы пытаетесь сделать...

спасибо за разъяснение по использованию global. Функция должна проверять, существует ли уже пользовательский термин с текущим годом, и если нет — создавать его. Я выбрал wp_login, потому что, насколько я знаю, нет хука, который срабатывает каждое 1-е января или что-то подобное, что я мог бы использовать.
