Как добавить пользовательскую таксономию в плагин WooCommerce
Я пытаюсь добавить пользовательскую таксономию в WooCommerce, нацеливаясь на тип записи product. Я использовал следующий код и добавил его в functions.php
. Я не получаю сообщений об ошибках, но таксономия не отображается в WooCommerce. Можете, пожалуйста, подсказать, как это сделать правильно или что я делаю не так?
<?php
// Регистрация пользовательской таксономии
function custom_taxonomy_Item() {
$labels = array(
'name' => 'Элементы',
'singular_name' => 'Элемент',
'menu_name' => 'Элемент',
'all_items' => 'Все элементы',
'parent_item' => 'Родительский элемент',
'parent_item_colon' => 'Родительский элемент:',
'new_item_name' => 'Название нового элемента',
'add_new_item' => 'Добавить новый элемент',
'edit_item' => 'Редактировать элемент',
'update_item' => 'Обновить элемент',
'separate_items_with_commas' => 'Разделяйте элементы запятыми',
'search_items' => 'Поиск элементов',
'add_or_remove_items' => 'Добавить или удалить элементы',
'choose_from_most_used' => 'Выбрать из наиболее используемых элементов',
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
);
register_taxonomy( 'item', 'product', $args );
}
?>
Обновление
<?php
add_action( 'init', 'custom_taxonomy_Item' );
// Регистрация пользовательской таксономии
function custom_taxonomy_Item() {
$labels = array(
'name' => 'Элементы',
'singular_name' => 'Элемент',
'menu_name' => 'Элемент',
'all_items' => 'Все элементы',
'parent_item' => 'Родительский элемент',
'parent_item_colon' => 'Родительский элемент:',
'new_item_name' => 'Название нового элемента',
'add_new_item' => 'Добавить новый элемент',
'edit_item' => 'Редактировать элемент',
'update_item' => 'Обновить элемент',
'separate_items_with_commas' => 'Разделяйте элементы запятыми',
'search_items' => 'Поиск элементов',
'add_or_remove_items' => 'Добавить или удалить элементы',
'choose_from_most_used' => 'Выбрать из наиболее используемых элементов',
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
);
register_taxonomy_for_object_type( 'item', 'product', $args );
}
?>
Вам необходимо сделать:
add_action( 'init', 'custom_taxonomy_Item' );
Потому что:
Используйте действие init для вызова этой функции. Вызов вне действия может привести к проблемам.
См. страницу кодекса register_taxonomy. Кроме того:
Лучше перестраховаться, чем потом жалеть при регистрации пользовательских таксономий для пользовательских типов записей. Используйте register_taxonomy_for_object_type() сразу после функции, чтобы связать их. В противном случае вы можете столкнуться с ситуациями, когда тип записи не прикреплен внутри фильтров, которые выполняются во время
parse_request
илиpre_get_posts
.
Поэтому лучше добавить:
register_taxonomy_for_object_type( 'item', 'product' );
В дополнение к чтению связанных страниц кодекса вы можете ознакомиться с:
Все это вместе должно помочь вам начать работу.
**Редактирование:**
Как я уже говорил в комментарии, у меня это работает, вот код:
add_action( 'init', 'custom_taxonomy_Item' );
function custom_taxonomy_Item() {
$labels = array(
'name' => __('Элементы'),
'singular_name' => __('Элемент'),
'menu_name' => __('Элементы'),
'all_items' => __('Все элементы'),
'parent_item' => __('Родительский элемент'),
'parent_item_colon' => __('Родительский элемент:'),
'new_item_name' => __('Название нового элемента'),
'add_new_item' => __('Добавить новый элемент'),
'edit_item' => __('Редактировать элемент'),
'update_item' => __('Обновить элемент'),
'separate_items_with_commas' => __('Разделяйте элементы запятыми'),
'search_items' => __('Поиск элементов'),
'add_or_remove_items' => __('Добавить или удалить элементы'),
'choose_from_most_used' => __('Выбрать из наиболее используемых элементов'),
);
$args = array(
'labels' => $labels,
'hierarchical' => true,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
);
register_taxonomy( 'item', 'product', $args );
register_taxonomy_for_object_type( 'item', 'product' );
}

Привет ialocin, спасибо за комментарий и подсказки. Я обновил код, как указано в начале, но "Item" все еще не отображается в меню WooCommerce

Вам нужно добавить register_taxonomy_for_object_type
, а не заменять register_taxonomy
. У меня это работает в среде разработки. Кстати, атрибуты товаров тоже являются пользовательскими таксономиями. @user1760110

спасибо, теперь работает, НО он не добавляет никакие термины к товару. если нажать на элемент и попытаться добавить новый элемент, ничего не происходит!

Не могу подтвердить это, у меня всё работает нормально. @user1760110

Спасибо за вашу помощь, я приму ваш комментарий как правильный ответ, однако мне нужно разобраться, почему термины не добавляются!

@user1760110 У меня такая же проблема, код выше не добавляет новые термины. Вы нашли решение своей проблемы?
