Як сформувати хлібні крихти з категорій посту

Як сформувати хлібні крихти з категорій посту

Як ви вже знаєте, WordPress — досить поширена CMS, і де її тільки не намагаються використовувати. Працюючи над деякими проєктами, іноді дивуєшся й ставиш собі запитання: навіщо саме тут? Адже простіше й продуктивніше використати щось на PHP-фреймворках. Але мода диктує своє — WordPress там, де потрібно, і часто там, де зовсім не потрібно.

Сьогодні мова піде не про те, де не слід використовувати WP. Сьогодні ви дізнаєтесь, як можна сформувати масив термінів або побудувати «хлібні крихти» (breadcrumbs) для поста. При цьому, неважливо, який це тип запису — стандартний пост чи кастомний, і яка таксономія — вбудована чи користувацька.

Функція формування масиву термінів поста

Переходимо до справи. Наш код складатиметься з двох частин. Перша — функція, друга — звичайний код:

function get_hierarchical_terms_post($post_id, $taxonomy)
{
	$terms = get_the_terms($post_id, $taxonomy);

	if($terms == false || is_wp_error($terms))
	{
		return array();
	}

	$term = array_shift($terms);
	$array = array($term);
	$parent_id = $term -> parent;

	while($parent_id)
	{
		$term = get_term_by('id', $parent_id, $term -> taxonomy);
		$parent_id = $term -> parent;
		$array[] = $term;
	}

	$array = array_reverse($array);

	return $array;
}

Розберімо код детальніше. Функція універсальна й приймає два параметри: ID поста та назву таксономії. Далі використовується функція get_the_terms, яка повертає масив термінів (об’єктів) поста. Якщо результат — помилка або false, функція повертає порожній масив.

Далі ми отримуємо перший термін і на основі нього будуємо лінійне «дерево» в масиві. У змінну $parent_id записуємо ID батьківського терміна й запускаємо цикл while, у якому за допомогою get_term_by отримуємо об’єкт батьківського терміна. Далі знову перезаписуємо $parent_id — вже для нового терміна:

$parent_id = $term -> parent;

І додаємо його в масив:

$array[] = $term;

Цикл триває, доки значення $parent_id не стане нульовим.

Після цього ми перевертаємо масив за допомогою array_reverse і повертаємо його як результат виконання функції.

Формуємо «хлібні крихти» для поста

Для цього напишемо наступний код:

$Terms = get_hierarchical_terms_post(get_the_ID(), 'category');

$category_link_ar = array();
foreach($Terms as $Term):
    $category_link_ar[] = '<a href="'.get_term_link($Term -> term_id, 'category').'">'.esc_attr($Term -> name).'</a>';
endforeach;

echo join(' &raquo; ', $category_link_ar);

Зверніть увагу: бажано викликати цей код всередині шаблону виводу контенту сторінки — це забезпечить коректне формування слагів категорій.

У функцію get_hierarchical_terms_post передаємо ID поточного поста як перший параметр, а як другий — назву таксономії.

Потім у циклі перебираємо терміни та формуємо посилання. Для отримання URL терміна використовуємо стандартну функцію WordPress get_term_link.

А «хлібні крихти» будуємо за допомогою функції PHP join, де перший аргумент — це стрілка », а другий — масив із посилань на категорії/терміни.

Ось і все!

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

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

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

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