Як визначити чи є категорія WordPress дочірньою

Як визначити чи є категорія WordPress дочірньою

Насправді, визначити це досить просто. Наприклад, якщо ми знаходимось на сторінці архіву постів (де спрацьовують хуки 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';
	}
}

Ось і все 🙂

Пости на схожі теми

З вашим WordPress сайтом проблеми? потрібний додатковий функціонал? нестандартний плагін чи згорнути нову сторінку?
Тоді напишіть мені через форму зворотного зв'язку, і я намагатимусь вам допомогти.

Напишіть коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *