Создание системы хлебных крошек в WordPress

Есть готовые решения, плагины, которые могут решать ваши задачи в области генерации хлебных крошек. Они отлично подойдут для готовых к использованию тем оформления. Здесь я их не рассматриваю.

В статье я покажу пару «собственных» подходов к генерации крошек, и это может стать основной для вашего решения.

У меня на сайте преимущественно два типа материалов — это посты в ленте (post) и страницы (page). Эти сущности хоть логически разделены, но хранятся в одной и тоже таблице базы данных. Т.е. деление весьма условное.

Тем не менее страницы не показываются в ленте. И они преимущественно используются в меню. Потому breadcrumbs для post и page имеют разную логику и по разному должны генерироваться.

Но у них есть общее правило, связанное с первым и последним элементами. 1-й элемент — это ссылка на главную страницу, а последний — не является даже ссылкой — это просто название самой страницы.

Breadcrumb для постов

Посты (post) у меня объединяются в категории, и у них могут быть теги. Основную категорию и один из тегов я добавляю в бредкрамб. Вообще, это против правил — т.к. бредкрамб должен отображать иерархию элементов, а не их горизонтальные связи. Но мой сайт — мои правила.

Breadcrumb для страниц

Для страниц (page) всё проще и сложнее одновременно. Простота связана с использованием меню. Нужно пройтись по меню и составить хлебные крошки согласно иерархии меню. Но сложность в том, что меню в WP хранится в той же таблице, что и публикации, с определенными допущениями и внутренними соглашениями.

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

Реализация

Я решил создать статический класс для хранения функций бредкрамба, а также вспомогательный DTO класс для хранения отдельных позиций хлебных крошек.

Класс BreadcrumbItem — элемент крошки

Это простой DTO (Data Transfer Object) для хранения информации об одном элементе хлебных крошек:

Класс Breadcrumb — генерация и рендеринг

Всего три статические функции — две наполняют массив крошек, и одна производит рендер из этого массива. Рассмотрим их по очереди.

Для постов:

Для страниц из меню:

Рендеринг HTML:

Использование в шаблонах

Для вставки в шаблон, нужно вызвать одну из двух функций генерации, а затем функцию рендера.

Для страниц:


Такая система хлебных крошек отлично подходит для большинства сайтов на WordPress. Главное преимущество — использование реальной структуры меню для страниц, что делает навигацию интуитивно понятной для пользователей.

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

Мало букафф? Читайте есчо !

Глючный фильтр shortcode_unautop в Wordpress

Июнь 25, 2010 г.

Проявления глюка довольно редки, и у меня всплывали всего пару раз, но я решил выяснить, где же wordpress мне делает "козью морду", и какой из его фильтров делает не то что надо. Проявления "бага" таковы - при вставке некоторого количества миниатюр картинок ...

Читать

Добавить favicon в шаблон на WP

Февраль 25, 2023 г.

Обычно настройки шаблона позволяют установить иконку через админ панель. Но если такой опции нет, то всегда можно добавить favicon программно. Для начала поместите вашу иконку favicon.png в каталог темы. Современные браузеры поддерживают разные ...

Читать

Отображение галереи в wordpress

Март 19, 2014 г.

Вордпресс позволяет вставлять изображения публикации в виде галереи, выполненной списком миниатюр. Для этого используется специальный тег (shortcode) - ...

Читать

Как разделить рендеринг WP_Widget для front и back-end?

Февраль 21, 2023 г.

Метод widget, который реализуется для отрисовки содержимого виджета вызывается одинаково для фронта и бек-енда. Но, если вы не утруждаете себя созданием необходимых для рендеринга на бек-енде стилей, то результат не похож, на то что вы увидите на фронте. ...

Читать
 

Комментарии к «Создание системы хлебных крошек в WordPress»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: