Таксономии в хлебных крошках

Вообще в данном случае есть несколько вариантов — всё зависит от того, имеет таксономия иерархию или нет, а также от того, каким образом будут присваиваться элементы таксономии к постам.

Я насчитал три разных варианта стечения обстоятельств:

  • Таксономия не содержит иерархии.
  • Таксономия содержит иерархию, но в постах будет отмечаться только один элемент таксономии и в хлебных он собственно и будет выводиться.
  • Таксономия с иерархией, в посту будет отмечаться всё дерево категорий, которое потом отправится в хлебную навигацию.

Рассмотрим каждый из вариантов по отдельности.

Таксономии без иерархии

По сути это механизм меток. Что может быть проще, чем вывести все элементы таксономии для поста через функцию the_terms().

global $post; // на случай, если вы будете использовать этот код внутри какой-нибудь функции
$true_post_id = $post->ID; // айдишник текущего поста
$true_taxonomy = 'region'; // название таксономии, у меня на протяжении всего поста это будут регионы
// третий параметр функции - текст или HTML код, который хотите добавить перед навигацией, можете оставить параметр пустым
// четвертый параметр функции - разделитель элементов таксономий, тут по логике подойдут , | / •
the_terms( $true_post_id, $true_taxonomy, 'Навигация: ', ' / ' );

Таксономии с иерархией

Механизм аналогичен рубрикам.

Простой вариант — когда для поста отмечается только один элемент таксономии (одна рубрика)

Тут также прекрасно подойдет функция the_terms(), так что смотрим предыдущий пример.

Сложный вариант — в админке отмечается всё дерево рубрик (не только рубрика, которой принадлежит пост, но и все её родительские элементы)

Вот как это будет выглядеть:

Таксономия с иерархией в админке WP

В данном случае для нас очень важно, чтобы элементы таксономии следовали друг за другом строго в порядке иерархии.

echo '<div id="kroshki">Вы здесь:';
$true_taxonomy = 'region'; // таксономия - регион
$true_terms = wp_get_post_terms( $post->ID, $true_taxonomy, array( "fields" => "ids" ) ); // вытаскиваем ID элементов, присвоенных посту
if( $true_terms ) {
	$term_array = trim( implode( ',', (array) $true_terms ), ' ,' );
	$neworderterms = get_terms($true_taxonomy, 'orderby=none&include=' . $term_array );
	foreach( $neworderterms as $orderterm ) {
		echo '<a href="' . get_term_link( $orderterm ) . '">' . $orderterm->name . '</a> &raquo; ';
	}
}
the_title();
echo '</div>';
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

По теме