БлогWordpressУстанавливаем «хлебные крошки» для WordPress без плагинов

Устанавливаем «хлебные крошки» для WordPress без плагинов

Привет, друзья. Сегодня я хочу рассказать, как установить у себя на сайте хлебные крошки без использования плагинов. Хлебные крошки, как вы знаете, позволяют улучшить навигацию по сайту. Особенно это будет заметно на больших сайтах с разветвленной структурой, например интернет-магазинах. На небольших сайтах с простой и понятной структурой (таких как мой) можно обойтись и без использования хлебных крошек, но я решил не обходиться 🙂 .

хлебные крошки

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

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

  • Отображается полная цепочка ссылок до страницы с учетов всех рубрик и подрубрик.
  • Можно задать любой текст ссылки главной страницы
  • Для текущей ссылки используется отдельный CSS-класс
  • Можно задать любой символ разделителя

А вот и сама функция хлебных крошек для WordPress:

<div>
<div>function dimox_breadcrumbs() {

 /* === ОПЦИИ === */
 $text['home']     = 'Главная'; // текст ссылки "Главная"
 $text['category'] = 'Архив рубрики "%s"'; // текст для страницы рубрики
 $text['search']   = 'Результаты поиска по запросу "%s"'; // текст для страницы с результатами поиска
 $text['tag']      = 'Записи с тегом "%s"'; // текст для страницы тега
 $text['author']   = 'Статьи автора %s'; // текст для страницы автора
 $text['404']      = 'Ошибка 404'; // текст для страницы 404

 $showCurrent = 1; // 1 - показывать название текущей статьи/страницы, 0 - не показывать
 $showOnHome  = 0; // 1 - показывать "хлебные крошки" на главной странице, 0 - не показывать
 $delimiter   = ' » '; // разделить между "крошками"
 $before      = '<span>'; // тег перед текущей "крошкой"
 $after       = '</span>'; // тег после текущей "крошки"
 /* === КОНЕЦ ОПЦИЙ === */

 global $post;
 $homeLink = get_bloginfo('url') . '/';
 $linkBefore = '<span typeof="v:Breadcrumb">';
 $linkAfter = '</span>';
 $linkAttr = ' rel="v:url" property="v:title"';
 $link = $linkBefore . '<a' . $linkAttr . ' href="%1$s">%2$s</a>' . $linkAfter;

 if (is_home() || is_front_page()) {

 if ($showOnHome == 1) echo '<div id="crumbs"><a href="' . $homeLink . '">' . $text['home'] . '</a></div>';

 } else {

 echo '<div id="crumbs" xmlns:v="http://rdf.data-vocabulary.org/#">' . sprintf($link, $homeLink, $text['home']) . $delimiter;

 if ( is_category() ) {
 $thisCat = get_category(get_query_var('cat'), false);
 if ($thisCat->parent != 0) {
 $cats = get_category_parents($thisCat->parent, TRUE, $delimiter);
 $cats = str_replace('<a', $linkBefore . '<a' . $linkAttr, $cats);
 $cats = str_replace('</a>', '</a>' . $linkAfter, $cats);
 echo $cats;
 }
 echo $before . sprintf($text['category'], single_cat_title('', false)) . $after;

 } elseif ( is_search() ) {
 echo $before . sprintf($text['search'], get_search_query()) . $after;

 } elseif ( is_day() ) {
 echo sprintf($link, get_year_link(get_the_time('Y')), get_the_time('Y')) . $delimiter;
 echo sprintf($link, get_month_link(get_the_time('Y'),get_the_time('m')), get_the_time('F')) . $delimiter;
 echo $before . get_the_time('d') . $after;

 } elseif ( is_month() ) {
 echo sprintf($link, get_year_link(get_the_time('Y')), get_the_time('Y')) . $delimiter;
 echo $before . get_the_time('F') . $after;

 } elseif ( is_year() ) {
 echo $before . get_the_time('Y') . $after;

 } elseif ( is_single() && !is_attachment() ) {
 if ( get_post_type() != 'post' ) {
 $post_type = get_post_type_object(get_post_type());
 $slug = $post_type->rewrite;
 printf($link, $homeLink . '/' . $slug['slug'] . '/', $post_type->labels->singular_name);
 if ($showCurrent == 1) echo $delimiter . $before . get_the_title() . $after;
 } else {
 $cat = get_the_category(); $cat = $cat[0];
 $cats = get_category_parents($cat, TRUE, $delimiter);
 if ($showCurrent == 0) $cats = preg_replace("#^(.+)$delimiter$#", "$1", $cats);
 $cats = str_replace('<a', $linkBefore . '<a' . $linkAttr, $cats);
 $cats = str_replace('</a>', '</a>' . $linkAfter, $cats);
 echo $cats;
 if ($showCurrent == 1) echo $before . get_the_title() . $after;
 }

 } elseif ( !is_single() && !is_page() && get_post_type() != 'post' && !is_404() ) {
 $post_type = get_post_type_object(get_post_type());
 echo $before . $post_type->labels->singular_name . $after;

 } elseif ( is_attachment() ) {
 $parent = get_post($post->post_parent);
 $cat = get_the_category($parent->ID); $cat = $cat[0];
 $cats = get_category_parents($cat, TRUE, $delimiter);
 $cats = str_replace('<a', $linkBefore . '<a' . $linkAttr, $cats);
 $cats = str_replace('</a>', '</a>' . $linkAfter, $cats);
 echo $cats;
 printf($link, get_permalink($parent), $parent->post_title);
 if ($showCurrent == 1) echo $delimiter . $before . get_the_title() . $after;

 } elseif ( is_page() && !$post->post_parent ) {
 if ($showCurrent == 1) echo $before . get_the_title() . $after;

 } elseif ( is_page() && $post->post_parent ) {
 $parent_id  = $post->post_parent;
 $breadcrumbs = array();
 while ($parent_id) {
 $page = get_page($parent_id);
 $breadcrumbs[] = sprintf($link, get_permalink($page->ID), get_the_title($page->ID));
 $parent_id  = $page->post_parent;
 }
 $breadcrumbs = array_reverse($breadcrumbs);
 for ($i = 0; $i < count($breadcrumbs); $i++) {
 echo $breadcrumbs[$i];
 if ($i != count($breadcrumbs)-1) echo $delimiter;
 }
 if ($showCurrent == 1) echo $delimiter . $before . get_the_title() . $after;

 } elseif ( is_tag() ) {
 echo $before . sprintf($text['tag'], single_tag_title('', false)) . $after;

 } elseif ( is_author() ) {
 global $author;
 $userdata = get_userdata($author);
 echo $before . sprintf($text['author'], $userdata->display_name) . $after;

 } elseif ( is_404() ) {
 echo $before . $text['404'] . $after;
 }

 if ( get_query_var('paged') ) {
 if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ' (';
 echo __('Page') . ' ' . get_query_var('paged');
 if ( is_category() || is_day() || is_month() || is_year() || is_search() || is_tag() || is_author() ) echo ')';
 }

 echo '</div>';

 }
 } // end dimox_breadcrumbs()</div>
</div>

Эту функцию необходимо вставить в файл functions.php, который находится в папке с вашей темой. Затем, в то место, где нужно вывести хлебные крошки, вставьте следующий код:

<div>
<div><?php if (function_exists('dimox_breadcrumbs')) dimox_breadcrumbs(); ?></div>
</div>

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

После этих действий хлебные крошки должны заработать.На моем блоге это выглядит так:

хлебные крошки

Все, что осталось сделать – настроить их оформление в файле style.css.

За весь блок хлебных крошек отвечает идентификатор #crumbs
За текущую “крошку” отвечает класс .current

Функция должна работать на версиях WordPress 2.5+.

Понравилась статья? Подписывайтесь на мой RSS канал rss канал, следите за мной в Твиттере , или получайте статьи по почте:

10 отзывов к записи "Устанавливаем «хлебные крошки» для WordPress без плагинов"

  1. Сергей

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

  2. Андрей

    Я тоже себе установил крошки без плагина, но кода у меня поменьше получилось раз в 10 наверное…

  3. mishuta 2012

    Как всегда исчерпывающее и подробное объяснение 😉 Но если на блоге только рубрики и к тому же в шаблоне прописывается к какой рубрике относится статья, то хлебные крошки, несмотря на простоту реализации, по моему будут лишними 😐

  4. Томский школьник

    А мне повезло с этим, не нужно было заморачиваться, т.к. хлебные крошки уже были встроены в тему! Но за статью все равно большое спасибо! Если кто-то у меня будет спрашивать как это сделать, буду скидывать Вашу ссылку 🙂

    • Виталий

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

  5. Вячеслав

    Прикольно, по названию даже не поймешь что вообще это такое!

  6. Котан

    Реализация отдельных функций без плагинов всегда снижает нагрузку на сервер. Спасибо за рекомендации!

  7. Виталий

    Я тоже в большей степени предпочитаю использовать php код а не плагины поэтому когда делал тему для блога, по максимум старался использовать именно этот способ вывода информации. К примеру у меня навигация и ТОП комментаторов выводятся используя php функции, а не плагины.

  8. Юрий

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

Оставить свой отзыв


  • Использую
  • По месяцам
  • GoGetLinks - лучшая биржа для продажи и покупки вечных ссылок.
  • Beget - один из лучших хостингов России по всем показателям.
  • Sape - ссылки все еще работают. Лучшая биржа временных ссылок и не только.
  • 2domains - очень дешевые домены для ваших сайтов. Надежный сервис - пользуюсь сам.
  • Блогун - лучший сервис для размещения постовых и обзоров на блоге.