Так как все время по работе возникает необходимость добавления в шаблоны хлебных крошек, то решил не лениться и оформить код в виде более универсального плагина.
Занимался им в эти выходные. WordPress.org как то очень оперативно отреагировали на заявку о предоставлении репозитория — проверили плагин в течении дня и выделили мне место под плагин.
Хлебные крошки — простая вещь, если не начать погружаться в частности конкретного сайта. Вот как обстоит дело в идеальной ситуации: все публикации должны быть связаны в одно дерево меню. Тогда путь будет выглядеть так:
Главная страница — текущий путь в меню.
В WP есть ещё частности вроде страниц вложений и архивных разделов.
Но если публикаций на сайте много, то подключать их все в меню не правильно. К примеру, сайт является интернет-магазином, и есть специальный тип публикации — описание товара, которые не будут добавлены в меню как отдельные пункты.
Все товары в этом случае удобно программно «смонтировать» в раздел сайта (к примеру) «каталог товаров», чтобы крошки выглядели так:
Главная — каталог товаров — товар.
Если товаров действительно много, то желательно чтобы между «каталогом» и «товаром» фигурировали какие то под-рубрики каталога.
Genzel Breadcrumbs
Эти и многие другие соображения я реализовал в плагине под странным названием «Genzel Breadcrumbs». Genzel — это отсылка к сказке братьев Гримм «Гензель и Гретель», где также фигурируют хлебные крошки. :)
Хотя для вставки плагина требуется добавить PHP код с вызовом функции в шаблон, но большая часть настроек вынесена в админку. Эти настройки используются по умолчанию при вызове ф-ции GenzelBreadcrumbs();, которая выводит хлебные крошки текущей страницы. Там же есть документация и примеры использования.
Помимо всем понятных настроек шаблонов, есть такой параметр как RULE.
Привила составления хлебных крошек
Правила задаются сочетанием специальных токенов. Токены разделяются пробелами и заменяются соответствующими кусочками бредкрамба. Кроме того, токены могут иметь некоторые модификаторы.
Токены
front — вставляет ссылку на главную страницу. Метка и URL можно быть задана в настройках.
menu — подключает путь данной страницы в меню. По умолчанию программа берет первое попавшееся меню, но если их создано несколько — то тогда лучше будет указать в настройках какое из них следует использовать.
1 |
front menu |
menu:fin — с модификатором fin, плагин прекращает строить путь, если публикация есть в меню. Это может быть полезно для публикаций не включенных в меню, к примеру:
1 |
front menu:fin tax:post_tag | tax:category current |
menu:trail — если текущий раздел отсутствует в меню, то front menu
построит цепочку содержащую только ссылку на главную страницу. Вот такой вариант будет более верен:
1 |
front menu:trail current |
При создании цепочки меню не будет включен последний элемент (текущая страница). Тогда есть раздел в меню или нет — не важно, в любом случае будет хотя бы два элемента — главная и сам раздел.
tax — токен добавляет ссылки на архивы таксономии. По умолчанию (без модификатора) используется словарь — post_tag
.
tax:TAXONOMY_NAME — чтобы указать имя словаря (таксономии) используйте модификатор.
current — текущая страница. Для этой ссылки используется отдельный шаблон, т.к. обычно она не оформляется как ссылка. Для некоторых ситуаций данный токен может выдать не одну, а несколько ссылок. Например, для архива за день, будет добавлена цепочка — архив за год, архив за месяц и архив за день.
| — вертикальная черта у программистов ассоциируется с битовой операцией «или». Данные токен (его нужно также отделять пробелами) позволяет применить только один токен из цепочки разделенной вертикальной чертой.
token1 | token2 | token3
Если токен не дал вклада в путь, то активируется следующий токен. Иначе другие токены в цепочке «или» пропускаются.
Это позволяет создать некое подобие логики :).
Монтирование
Возвращаясь к примеру с товарами и каталогом, расскажу о ещё одной возможности Genzel Breadcrumbs. Это монтирование публикации по типу (и/или) термину в определенные точки дерева сайта.
Из админки монтирование в версии 1.0 управлять нельзя. Я думаю доработать это в будущих версиях плагина.
Монтирование выполняется заданием специального параметра при вызове функции GenzelBreadcrumbs.
1 2 3 4 5 6 7 |
<?php GenzelBreadcrumbs(array( 'mounts' => array( array('where' => 'shop', 'what' => 'type:product', 'how' => 'tax:product_cat current'), ), )); ?> |
Точек монтирования может быть много, и каждая из них имеет три параметра. Дословно — where куда монтировать, what что и how как.
В данном примере я привел настройку бредкрамба для публикации типа «product», которые подключаются в раздел сайта ‘/shop/’. Это типично при использовании woocommerce.
Хлебные крошки в этом случае строятся следующим образом — сначала строится бредкамб для точки монтирования (раздела ‘/shop/’), а потом к нему добавляется путь публикации типа product, построенные по правилу, заданному параметром how. В данном примере кроме названия товара будет добавлена ссылка(-и) на категорию товара.
Условия в what могут быть двух видов — это тип материала и термин. Термин задаётся вот таким шаблоном — term:TAXONOMY_NAME:TERM_SLUG
. Например:
1 2 3 4 5 6 7 8 9 10 |
<?php GenzelBreadcrumbs(array( 'mounts' => array( array( 'where' => 'shop', 'what' => 'type:product term:product_cat:suveniry', 'how' => 'current') ), )); ?> |
У монтирования пока есть определенные ограничения. Подключить крошки можно только в публикацию. Смонтировать в архив или какой либо виртуальный раздел сайта не получится.