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

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

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

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

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

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

Breadcrumb для постов

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

Breadcrumb для страниц

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

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

Реализация

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

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

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

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

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

Для постов:

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

Рендеринг HTML:

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

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

Для страниц:


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

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

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

Подключаем LESS препроцессор к вашей теме в Wordpress

Июнь 2, 2019 г.

Вкусив однажды всех радостей от использования препроцессора, сложно себя заставить работать с нативным CSS. Посмотрим как подключить LESS к вашей теме на WP. Т.к. уже есть готовые решения, то воспользуемся одним из них. Плагин WP-LESS сделает большую ...

Читать

Получить ID публикации по адресу (slug, path, name) в WP

Февраль 8, 2018 г.

Wordpress API очень разрослось, и почти на каждый случай есть своя функция. И в этой куче функций найти то, что нужно, бывает не просто. Задача - получить ID публикации по её адресу, а вернее значению slug или post_name. В кодексе есть подходящая ...

Читать

Анти CSRF в WP

Май 31, 2023 г.

В поддержку по плагину Inactive User Deleter недавно написали, что Wordfence считает мой плагин уязвимым к CSRF. Я всегда пытаюсь реагировать на запросы юзеров, но сначала мне показалось, что опять какая то параноидальная тулза что то там отрапортовала, ...

Читать

Genzel Breadcrumbs плагин для WP

Июль 3, 2017 г.

Так как все время по работе возникает необходимость добавления в шаблоны хлебных крошек, то решил не лениться и оформить код в виде более универсального ...

Читать
 

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

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



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