## Хлебные крошки для WordPress
Вы, вероятно, уже знакомы с понятием "Хлебные крошки" в веб-разработке и, возможно, даже реализовывали их в WordPress.
**Хлебные крошки** — это элемент навигации на сайте, который показывает путь от главной страницы до текущей страницы, на которой находится пользователь. По сути, это навигационная цепочка. Название "Хлебные крошки" связано с известной сказкой, в которой дети не смогли вернуться домой, потому что вместо камешков бросали крошки, которые съели птицы.
### Содержание
- Функция "Хлебные крошки" для WordPress
- Примеры использования фильтров
- Другой вариант хлебных крошек
### Как выглядят хлебные крошки
Пример хлебных крошек:
Главная » Раздел » Подраздел » Текущая страница
**Хлебные крошки** особенно рекомендуются для сайтов со сложной структурой, так как они помогают пользователям лучше ориентироваться в сайте. Посетители могут легко подняться на уровень выше и просмотреть всю ветвь.
Я поделюсь функцией для WordPress, которая реализует цепочкуBreadcrumbs на всех типах страниц, включая таксономии и настраиваемые типы записей.
### Функция отображает "Хлебные крошки" для следующих типов страниц:
- Главная страница
- Статическая страница
- Любая иерархическая страница
- Страница записи
- Страница вложений
- Любой неиерархический тип записи (привязанный к любой таксономии, например, стандартным категориям)
- Страница категории
- Страница метки
- Страница таксономии (как иерархической, так и простой)
- Архивы по датам и авторам
- Страницы пагинации для всех типов, где предусмотрена пагинация (например: Главная » Категория » Страница 2,3,4)
- Поддерживает микроданные (можно проверить с помощью инструментов Яндекса и Google).
Среди особенностей, которые выделяют эту функцию, можно отметить правильное отображение хлебных крошек для настраиваемых типов записей и таксономий. В других аналогах пагинация отображалась как "Категория (страница 2)", тогда как здесь — "Категория > Страница 2", что более корректно.
Функция максимально оптимизирована по производительности. Я не рекомендую плагин Breadcrumb NavXT из-за его сложности. Моя функция не хуже, а в некоторых аспектах, даже лучше — по функциональности, компактности и скорости!
Функция также поддерживает микроданные: schema.org или RDF, смотрите параметр 'markup'
.
### Функция "Хлебные крошки" для WordPress
```php
get_crumbs( $sep, $l10n, $args );
}
class Kama_Breadcrumbs {
public $arg;
// Локализация
static $l10n = [
'home' => 'Главная',
'paged' => 'Страница %d',
'_404' => 'Ошибка 404',
'search' => 'Результаты поиска по запросу - %s',
'author' => 'Архив автора: %s',
'year' => 'Архив за %d год',
'month' => 'Архив за: %s',
'day' => '',
'attachment' => 'Медиа: %s',
'tag' => 'Записи по метке: %s',
'tax_tag' => '%1$s из "%2$s" по тегу: %3$s',
];
// Параметры по умолчанию
static $args = [
'on_front_page' => true,
'show_post_title' => true,
'show_term_title' => true,
'title_patt' => '%s',
'last_sep' => true,
'markup' => 'schema.org',
'priority_tax' => ['category'],
'priority_terms' => [],
'nofollow' => false,
'sep' => '',
'linkpatt' => '',
'pg_end' => '',
];
function get_crumbs( $sep, $l10n, $args ) {
global $post, $wp_post_types;
self::$args['sep'] = $sep;
$loc = (object) array_merge(apply_filters('kama_breadcrumbs_default_loc', self::$l10n), $l10n);
$arg = (object) array_merge(apply_filters('kama_breadcrumbs_default_args', self::$args), $args);
$arg->sep = '' . $arg->sep . ''; // добавляем
$sep = &$arg->sep;
$this->arg = &$arg;
// Проверка на микроданные
if (1) {
$mark = &$arg->markup;
// По умолчанию
if (!$mark) {
$mark = [
'wrappatt' => ' ',
'linkpatt' => '%s',
'sep_after' => '',
];
} elseif ($mark === 'rdf.data-vocabulary.org') {
$mark = [
'wrappatt' => ' ',
'linkpatt' => '%s',
'sep_after' => '', // закрыть span после разделителя!
];
} elseif ($mark === 'schema.org') {
$mark = [
'wrappatt' => ' ',
'linkpatt' => '%s',
'sep_after' => '',
];
} elseif (!is_array($mark)) {
die(__CLASS__ . ': параметр "markup" должен быть массивом...');
}
$wrappatt = $mark['wrappatt'];
$arg->linkpatt = $arg->nofollow ? str_replace('sep .= $mark['sep_after'] . "n";
}
// Логика формирования хлебных крошек
// (дальше реализуется основная логика функции)
}
// (дальше идут другие методы класса)
}
/**
* Этот код нужно вставить в файл functions.php вашей темы
* или напрямую в файл, где вызывается функция.
*
* Чтобы вызвать функцию, используйте следующий код:
*
*
* Для изменения разделителя между ссылками укажите первый параметр:
*
*/
### Примеры использования фильтров
**#1 Изменение параметров через фильтр**
С помощью фильтра можно изменить параметры по умолчанию:
```php
add_filter('kama_breadcrumbs_default_args', function($args) {
$args['on_front_page'] = 0;
$args['show_post_title'] = '';
$args['priority_tax'] = ['mytax'];
return $args;
});
Если параметры указать при вызове функции в третьем аргументе, они переопределят параметры, заданные через фильтр.
#2 Пример перевода хлебных крошек на английский
if( function_exists('kama_breadcrumbs') ) {
$myl10n = [
'home' => 'Front page',
'paged' => 'Page %d',
'404' => 'Error 404',
'search' => 'Search results by query - %s',
'author' => 'Author archive: %s',
'year' => 'Archive by %d year',
'month' => 'Archive by: %s',
'day' => '',
'attachment' => 'Media: %s',
'tag' => 'Posts by tag: %s',
'tax_tag' => '%1$s from "%2$s" by tag: %3$s',
];
kama_breadcrumbs(' » ', $myl10n);
}
#3 Добавление пользовательской ссылки в начало хлебных крошек
Добавьте следующую функцию рядом с кодом хлебных крошек, чтобы добавить ссылку к "Главной":
add_action('kama_breadcrumbs_home_after', 'my_breadcrumbs_home_after', 10, 4);
function my_breadcrumbs_home_after($false, $linkpatt, $sep, $ptype) {
// Если мы в категории с ID 5 или в дочерней категории
$qo = get_queried_object();
if (is_category() && ($qo->term_id == 5 || $qo->parent == 5)) {
$page = get_post(7);
return sprintf($linkpatt, get_permalink($page), $page->post_title) . $sep;
}
return $false;
}
Другой вариант хлебных крошек
Этот код подходит не только для WordPress, но и для других систем управления контентом. Для WordPress он будет работать:
- ��сли включены постоянные ссылки
- Если ссылки содержат названия категорий
- Если названия статей и категорий записаны в кириллице или это английский блог
В противном случае он будет работать, но, возможно, не очень хорошо. Этот вариант разбивает ссылку на части, используя /
как разделитель.
Пример функции:
function breadcrumbs( $separator = ' » ', $home = 'Главная' ) {
$path = array_filter(explode('/', parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)));
$base_url = ($_SERVER['HTTPS'] ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . '/';
$breadcrumbs = array("$home");
$last = end(array_keys($path));
foreach ($path as $x => $crumb) {
$title = ucwords(str_replace(['.php', '_'], ['', ' '], $crumb));
if ($x != $last) {
$breadcrumbs[] = ''. $title .'';
} else {
$breadcrumbs[] = $title;
}
}
return implode($separator, $breadcrumbs);
}
Чтобы использовать эту функцию, выведите её на экран через echo
: