Как сформировать хлебные крошки из категорий поста

Как сформировать хлебные крошки из категорий поста

Как вы уже знаете, вордпресс довольно распространенная CMS, и где ее только не пытаются использовать. Выполняя некоторые проекты, порой удивляешься. И задаешь себе вопрос — а здесь то за чем? Ведь проще и производительнее использовать что-то написанное на php фреймворках. Но мода диктует свое — WordPress, там где нужно и часто там где не нужно.

Сегодня речь пойдет не о том что не нужно использовать WP в каких-то проектах. Сегодня вы узнаете как можно сформировать массив или построить хлебные крошки поста. При этом, не важно какой это тип записи (т. е. посты или custom post type) и какая таксономия — встроенные или созданные самостоятельно.

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

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

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;
}

Давайте подробнее разберем код. Функция реализована универсально, и в качестве второго параметра принимает название таксономии. Далее идет функция «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 текущего поста, вторым — таксономию.

Далее, в цикле проходим по массиву терминов, и формируем ссылки. Для определения ссылки термина, используем стандартную ф-ю WordPress «get_term_link».

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

На этом все!

Как сформировать хлебные крошки из категорий поста
Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *