Насправді, визначити це досить просто. Наприклад, якщо ми знаходимось на сторінці архіву постів (де спрацьовують хуки is_archive, is_tag тощо), ми можемо скористатися наступним способом:
add_action('wp', function()
{
$Term = get_queried_object();
if(is_a($Term, 'WP_Term'))
{
if($Term -> parent > 0)
{
echo 'Category, tag, or term is a child of';
}
}
});Функція get_queried_object() містить динамічні дані, тобто ті, що залежать від сторінки, на якій ми знаходимось у поточний момент. Якщо це сторінка поста — функція поверне об’єкт WP_Post з даними поста. Якщо це сторінка архіву (категорії, терміна або тега), тоді функція get_queried_object() поверне об’єкт WP_Term. У деяких випадках вона може містити об’єкт post_type.
Повернемось до коду вище. Через властивість терміна parent ми можемо визначити, чи є поточний термін дочірнім. Якщо parent дорівнює нулю — термін є кореневим. Якщо більше нуля — термін вкладений у інший і є дочірнім по відношенню до нього.
Це був приклад для випадку, коли ми перебуваємо на сторінці категорії тощо. А що робити, якщо потрібно визначити батьківський термін для довільного терміна — наприклад, знаючи його ID або slug?
Для цього можна скористатися функцією get_term_by().
Це корисна функція, яка дозволяє отримати дані будь-якого терміна за його id / slug / name / term_taxonomy_id. Наприклад, отримати термін за його ID:
$Term = get_term_by(‘id’, 123, ‘category’);
Як ви вже здогадалися, третім параметром передається назва таксономії, до якої належить термін.
Аналогічно отримаємо дані терміна за slug:
$Term = get_term_by(‘slug’, ‘test-term’, ‘category’);
Після отримання об'єкта терміна, виконуємо перевірку його типу та значення батька:
if(is_a($Term, 'WP_Term'))
{
if($Term -> parent > 0)
{
echo 'Category, tag, or term is a child of';
}
}Ось і все 🙂
