Вопрос или проблема
Я создал пользовательскую таксономию и зарегистрировал ее. Я хочу, чтобы максимальный уровень таксономии был 2. Т.е. Родитель => ребенок => подребенок. Как установить уровень??
Вы не можете установить уровень, когда создаете таксономию.
Единственный способ обеспечить уровень — это отслеживание создания термина: Фильтр create_term
; это самый ранний фильтр, который позволяет нам изменить идентификатор родительского термина. По непонятным причинам фильтр pre_insert_term
не содержит этой информации … вероятно, это было бы слишком просто.
Затем измените идентификатор родительского термина, если текущий уже является идентификатором второго уровня.
Пример кода, не протестирован:
add_action( 'create_term', function( $term_id, $tt_id, $taxonomy ) {
$term = get_term( $term_id );
// Ничего не делать.
if ( empty( $term->parent ) )
return;
$parent = get_term( $term->parent, $taxonomy );
// Это термин второго уровня, это нормально.
if ( empty( $parent->parent ) )
return;
wp_update_term( $term_id, $taxonomy, [ 'parent' => $parent->term_id ] );
}, 10, 3 );
Ответ или решение
Как установить уровни иерархии таксономии на 2
Создание и управление таксономиями в WordPress — важный аспект организации контента. Ваша задача состоит в том, чтобы ограничить максимальный уровень иерархии вашей пользовательской таксономии до двух: родитель ⇒ ребенок ⇒ подребенок. Поскольку напрямую установить уровень иерархии при создании таксономии нельзя, необходимо использовать механизм фильтров WordPress для контроля за созданием терминов.
Подход к решению проблемы
Наиболее эффективным способом ограничения уровня таксономии является использование фильтра create_term
. Этот фильтр активируется в момент создания термина и позволяет изменять идентификатор родительского термина, что позволяет вам контролировать иерархию терминов.
Пример кода
Следующий код, написанный на PHP, будет отслеживать создание новых терминов и изменять идентификатор родительского термина, если создаваемый термин уже находится на втором уровне:
add_action( 'create_term', function( $term_id, $tt_id, $taxonomy ) {
$term = get_term( $term_id );
// Если нет родителя, ничего не делаем
if ( empty( $term->parent ) ) {
return;
}
$parent = get_term( $term->parent, $taxonomy );
// Если родительская категория не имеет родителя, ничего не изменяем
if ( empty( $parent->parent ) ) {
return;
}
// Обновляем термин, чтобы установить его родителем первого уровня
wp_update_term( $term_id, $taxonomy, [ 'parent' => $parent->term_id ] );
}, 10, 3 );
Пояснения к коду
-
Хук
create_term
: Используется для отслеживания событий создания терминов. При вызове хука доступны три параметра:$term_id
,$tt_id
и$taxonomy
. -
Получение термина: С помощью функции
get_term()
мы получаем информацию о созданном термине. -
Проверка наличия родителя: Если у текущего термина нет родителя, мы просто выходим из функции.
-
Получение родителя: При помощи
get_term()
мы получаем информацию о родительском терме. -
Проверка уровня иерархии: Если родитель не имеет собственного родителя, значит, текущий термин находится на втором уровне, и мы ничего не изменяем.
-
Обновление термина: В случае, если текущий термин находится на уровне подкатегории, мы обновляем его родителя, чтобы он стал непосредственным потомком первой категории.
Заключение
Таким образом, с помощью простого кода можно эффективно управлять иерархией пользовательских таксономий в WordPress. Это позволит вам ограничить структуру до необходимого уровня, что в свою очередь улучшит организацию вашего контента и упростит навигацию для пользователей. Используйте предложенный метод с учетом своих особенностей реализации и настраивайте его по необходимости.
Это решение не только поспособствует упрощению работы с терминами, но и значительно повысит качество структуры вашего контента, что всегда полезно для SEO и пользовательского опыта.