t00rt
@t00rt

Почему не работают хуки?

Добавляю к созданным через API WP таксономиям поле для добавления картинки.
Если вбивать название таксономий в массив в ручную то все нормально работает: (код ниже)

$taxonomies = [
	'catalog' => 'catalog',
	'size' => 'size'
];

foreach ($taxonomies as $taxonomy) {
	add_action("{$taxonomy}_add_form_fields", 'meta_cat_fill_image', 10, 2 );
	add_action("{$taxonomy}_edit_form_fields", 'meta_cat_fill_image', 10 );
	add_action("edited_{$taxonomy}", 'save_meta_cat_fill_image', 10, 2 );
	add_action("create_{$taxonomy}", 'save_meta_cat_fill_image', 10, 2 );
}


Но при попытке получить все таксономии через функцию wp "get_object_taxonomies" все ломается, т.е. такой код уже не работает:

$taxonomies = get_object_taxonomies('products', 'objects');
foreach ($taxonomies as $taxonomy) {
	add_action("{$taxonomy->name}_add_form_fields", 'meta_cat_fill_image', 10, 2 );
	add_action("{$taxonomy->name}_edit_form_fields", 'meta_cat_fill_image', 10 );
	add_action("edited_{$taxonomy->name}", 'save_meta_cat_fill_image', 10, 2 );
	add_action("create_{$taxonomy->name}", 'save_meta_cat_fill_image', 10, 2 );
}


Проблема явно в том что данные не приходят в $taxonomies и соответственно в цикле пробегать нечего.
Тут что то связанно с порядком обработки, понять не могу что именно. Пихал код и в начало function.php и в конец, не помогает.
  • Вопрос задан
  • 369 просмотров
Решения вопроса 1
irtek
@irtek
Wordpress-addicted
Дело в том, что данная функция не делает запросов, а сверяет данные с глобальной переменной $wp_taxonomies, которая в functions.php не определена. Эта функция заработала бы в файле шаблона.

Чтобы получить в functions.php все зарегистрированные к текущему моменту (по поводу этого выделения будет комментарий ниже) таксономии воспользуйтесь функцией get_taxonomies()

$taxonomies = get_taxonomies('products', 'objects');


в такой переменной будут данные и ваш код дальше заработает.

Обращу еще внимание на подводные камни вашей задачи.
В этой переменной изначально будут содержаться только базовые таксономии WP: category, post_tag, nav_menu, link_category, post_format

Если вы создавали свою таксономию через register_taxonomy, то она попадет в этот массив, ЕСЛИ код register_taxonomy находится в functions.php ВЫШЕ данного кода или если функция регистрации таксономии подключена к хуку инициализации 'init' (!), что правильнее всего. А если вы регистрировали таксономию через плагин, например, через популярный Custom post ui и т.п. то и вовсе не попадет сюда, т.к. регистрация таксономий в плагине происходит раньше срабатывания functions.php
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы