Хлебные крошки для WordPress: реализация и использование

## Хлебные крошки для 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'  => '
%s
', 'linkpatt' => '%s', 'sep_after' => '', ]; } elseif ($mark === 'rdf.data-vocabulary.org') { $mark = [ 'wrappatt' => '
%s
', 'linkpatt' => '%s', 'sep_after' => '', // закрыть span после разделителя! ]; } elseif ($mark === 'schema.org') { $mark = [ 'wrappatt' => '
%s
', '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:

Leave a Reply

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