Вопрос или проблема
У меня есть собственная таксономия, зарегистрированная как department
, которая работает в других запросах, но не работает, когда я использую:
$args = array( 'child_of' => 483 , 'hide_empty' => false);
$subcats = get_terms( 'department', $args );
foreach( $subcats as $category ) {
echo $category->name;
}
Как только мы убираем child_of
, выводятся все термины. Даже использование “parent” тоже не работает. Что я упускаю? В базе данных я могу проверить, что термины существуют в иерархии.
Я сам решил эту проблему, поэтому хотел ответить на свой вопрос.
В таблице опций результаты кэшируются, поэтому я выполнил запрос и удалил это.
SELECT * FROM `wp_options` WHERE `option_name` like '%department%'
department – это название моей таксономии здесь.
Вы можете проверить функцию _get_term_hierarchy в taxonomy.php в папке wp-includes.
Вероятно, это закэшировано, но вместо того, чтобы делать SQL-запрос для устранения проблемы и потенциально сломать что-то, используйте специальную функцию:
clean_taxonomy_cache( 'department' );
Или, если у вас есть WP CLI:
wp cache flush
Другие варианты включают:
delete_option( 'department_children' );
- Создание/удаление терминов
Используйте параметр parent
, если child_of
не работает, они служат похожим целям, но parent
используется, когда вы хотите получить термины, которые являются прямыми дочерними элементами конкретного родительского термина.
$args = array( 'parent' => 483 , 'hide_empty' => false);
$subcats = get_terms( 'department', $args );
foreach( $subcats as $category ) {
echo $category->name;
}
Ответ или решение
Проблема с использованием get_terms
и параметра child_of
При работе с пользовательскими таксономиями в WordPress может возникать ряд проблем, особенно когда речь идет о получении терминов с помощью функции get_terms()
. Ваша ситуация, когда запрос на получение подкатегорий с использованием параметра child_of
не возвращает ожидаемых результатов, является распространенной. Рассмотрим, как правильно использовать данный функционал и какие шаги предпринять для устранения возможных причин неполадок.
Объяснение параметров
get_terms()
— это функция, используемая для извлечения терминов из таксономии. Параметры child_of
и parent
в этом контексте часто вызывают путаницу.
child_of
следует использовать, если вы хотите получить все подкатегории конкретного термина, включая их подкатегории на любом уровне.parent
ограничивает запрос только непосредственными дочерними терминами для заданного родителя.
Ваш код с child_of
работает неправильно, потому что в базе данных может присутствовать кэш, который мешает правильной выборке данных. Решение проблемы может быть достигнуто несколькими способами.
Кеширование в WordPress
В WordPress результаты запросов к таксономиям могут кэшироваться для оптимизации производительности. Это значит, что при внесении изменений в иерархию терминов, изменения не сразу отображаются. Чтобы убедиться, что кэш очищен:
-
Используйте функцию
clean_taxonomy_cache()
:clean_taxonomy_cache('department');
Это наиболее безопасный и предпочтительный способ очистки кэша для конкретной таксономии.
-
Если у вас есть доступ к WP CLI, вы можете выполнить команду:
wp cache flush
Это также эффективно очистит кэш всего сайта.
-
Удаление опции из базы данных:
Хотя это менее предпочтительный вариант, вы также можете удалить опцию из таблицыwp_options
:DELETE FROM `wp_options` WHERE `option_name` = 'department_children';
-
Создание или удаление терминов: Иногда простое добавление или удаление термина может заставить WordPress обновить кэш.
Альтернативные подходы
Если после всех манипуляций проблема остается, воспользуйтесь параметром parent
. Это позволит ограничить результаты только непосредственными подкатегориями:
$args = array('parent' => 483, 'hide_empty' => false);
$subcats = get_terms('department', $args);
foreach ($subcats as $category) {
echo $category->name;
}
В этом коде вы используете parent
, который возвращает только непосредственные дочерние термины к термину с ID 483.
Итог
Если get_terms()
не работает с параметром child_of
, скорее всего, проблема заключается в кэшировании данных. Используйте предложенные методы очистки кэша и альтернативные параметры для получения ожидаемого результата. Правильное управление кэшем имеет ключевое значение для эффективного использования пользовательских таксономий в WordPress.