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

«Хлебные крошки» — это важный элемент навигации веб-сайта, который повышает его юзабилити. Особенно это касается сайтов со сложной структурой. Я, к сожалению (а, может, и не к сожалению), не использую их на большинстве своих сайтов, возможно, потому, что у них слишком простая структура ...

Полезные комментарии (2)
Комментарии (510)
  1. 1
    Александр

    Спасибо!Очень нужный код, дабы не пользоваться плагином.

  2. 2
    Евгений

    Кстати dimox. Отображается полная цепочка ссылок до текущей страницы только если при публикации статьи отметить все дочерние и родительские рубрики. Если указать только одну, то только её и выведет, даже если она вложенная 3-го уровня.

  3. 3
    Максим

    Спасибо, что обновляете скрипт.
    Попытаюсь объяснить данную проблему.
    Необходимо отобразить в участке кода is_single() нумерацию категорий и подкатегорий, а именно так:
    Главная -> (2) Категория -> (3) Подкатегория -> (4) Название записи
    Это нужно для такого кода:

    <meta itemprop="position" content="<?php echo $i + 2; ?>" />

    Главная по умолчанию будет именть content=»1″, а остальные категории будут помечаться нумерацией.

    Подскажите, как реализовать в Вашем коде, заранее спасибо!

  4. 4
    Олег

    Спасибо огромное !!!!

  5. 5
    DH

    Для таксономий добавьте:

    } elseif ( is_tax() ) {
     if ($show_home_link &amp;&amp; $show_current) echo $sep;
     $term = get_queried_object();
     if ( $term ) {
     $tax = get_taxonomy( $term->taxonomy );
     $title = single_term_title( $tax->labels->name. ': ', false );
     echo $title;
     }
    

    где-нибудь перед

    } elseif ( is_day() ) {
  6. 6
    авдвордс

    Ребята ну файл фуншкнспхп легко найти. я вставил код. а куда дальше вставить строчку
    ??? Где искать место шаблона? я на вижуал композере сайт собирал(((

  7. 7

    Такой вопрос: на сайте записи публикуются в двух разных группах категорий. Например, одна группа — населенные пункты, а вторая группа — тема новостей. При добавлении данного кода в разных записях наблюдается разное отображение иерархии. Так, в некоторых записях можно встретить Главная > Киев, а в некоторых — Главная > Криминал, что не совсем нормально. Как исключить некоторые рубрики? Ведь в любом случае запись не остается без рубрики. Мне нужно исключить именно населенный пункт, поскольку его я могу выводить другим способом.

  8. 11
    Максим

    Доброй ночи, спасибо за код, очень полезный.
    Возникла проблемка, надеюсь что вы мне поможете.
    На странице автора выдает такую ошибку Notice: Trying to get property of non-object in on line 121 http://shot.qip.ru/00QPGK-1mqQ2hFtI/ если у пользователя нет записей, если они есть, то ошибка исчезает и имя отображается http://shot.qip.ru/00QPGK-3mqQ2hFtJ/
    Надеюсь на вашу помощь, не хочется плагин ставить, заранее спасибо.

  9. 16

    Функцию необходимо поместить в файл functions.php вашей WordPress-темы. Куда именно — в самый низ или где-то между строчек? Я в самый низ воткнул и нет крошек…

    Про этот не спрашиваю, так как знаю:

  10. 20
    Евгений

    Добрый вечер, не подходят такие хлебные крошки вообще. Происходит дублирование тайтла статьи. Нужно убрать название статьи из иерархии. Подскажите как оставить ссылку на главную и на рубрику, без single. ?

  11. 22
    Евгений

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

  12. 25

    Решил немного допилить, может кому-то пригодится, в случаях когда используется статическая страница для вывода новостей, хлебные крошки в такой интерпретации показываться не будут, поэтому делаем следующее:
    1) в коде ищем раздел опций и добавляем след. опцию
    $text[‘news’] = ‘NEWS’; // текст для страницы «Новости»
    2) в сравнении if (is_home() || is_front_page()) убираем часть касающуюся именно страницы новостей, в итоге код:
    if (is_front_page())
    3) ищем следующий код » } elseif ( is_search() ) { »
    и перед ним добавляем
    } elseif ( is_home() ) {
    if ($show_home_link && $show_current) echo $sep;
    if ($show_current) echo $before . $text[‘news’] . $after;

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

    Автору спасибо за код, постоянно его в разработке использую… лучше не напишешь…

  13. 26
    Дмитрий

    Здравствуйте.
    Как можно исключить из ссылок название домена? Мне необходимо в промежуток между доменом и последующей строкой поставить адрес города.

    • 27
      Дмитрий

      Решил проблему изменением 145 строчки. (делал только для страниц, остальное мне не важно)
      Заменил

      $breadcrumbs[] = sprintf($link, get_permalink($page->ID), get_the_title($page->ID));

      на

      $breadcrumbs[] = sprintf($link, '/'.$item_city.'/'.get_page_uri($page->ID), get_the_title($page->ID));

      где $item_city — моя переменная города.
      Также необходимо заменить функцию get_page на get_post, так как она запрещена с версии 3.5.0, больше не поддерживается и может быть удалена в следующих версиях

  14. 28
    Вадим

    Стоит qtranslate Как вывести строку $text[‘home’] = ‘Главная’; на 2х языках.

    $text[‘home’] = ‘[:ru]Головна [:en]Home’; — НЕ работает

  15. 30
    Михаил

    У меня другой вопрос. Почему-то на странице поиска, когда ничего не найдено и на странице ошибки 404 выдает такую ошибку «Notice: Trying to get property of non-object in /var/www/u000000/data/www/site.com/wp-content/themes/shablon/functions.php on line 142».

    Ругается на эту строку:

    $parent_id = $post->post_parent;

    При этом в код функции не вмешивался, скопировал и вставил как есть.

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

    В чем может быть проблема?

  16. 36
    Yaroslav

    Добрый день. Спасибо за код, работает отлично.
    Только я понятия не имею как и куда писать стили CSS для изменения параметров шрифта((
    Мне нужно сделать чтобы ссылки подчёркнуты были, исключая разделители и текущую «крошку». У текущей «крошки» хочу изменить цвет. И нет, я не ленивый, я уже попробовал тысячи способов, но у меня не получается ничего изменть.
    Подскажите пожалуйста простым языком.

  17. 37

    Доброго времени суток Дмитрий. Благодарю за реализацию хлебных крошек. Есть вопрос по этому поводу, а именно смущает вывод заголовка h1 — 2 раза. Как поисковики к этому отнесутся?

  18. 39
    Александр

    Спасибо автору. Отличная функция!

  19. 40

    Заинтересовал вопрос.

    На сайте есть крошки. И они на русском. Вывожу через

    Но так же есть страница на англ языке.
    И там лучше бы сделать крошки на англ. языке, точнее слово «главная» -> переименовать в «home» только для этой определенной страницы.

    Какое есть решение?

  20. 41

    Здравствуйте!
    А что делает эта строка?

     printf($link, $home_link . '/' . $slug['slug'] . '/', $post_type->labels->singular_name);

    В одном плагине она добавляет в url цепочки по два слеша, то есть http://site.ru//name//name.html
    Если убрать «/», то всё становится хорошо.

  1. 1
    DH

    Для таксономий добавьте:

    } elseif ( is_tax() ) {
     if ($show_home_link &amp;&amp; $show_current) echo $sep;
     $term = get_queried_object();
     if ( $term ) {
     $tax = get_taxonomy( $term->taxonomy );
     $title = single_term_title( $tax->labels->name. ': ', false );
     echo $title;
     }
    

    где-нибудь перед

    } elseif ( is_day() ) {
  2. 2

    Замените эти строки:

    if ( get_query_var('cpage') ) {
    	echo $sep . sprintf($link, get_permalink(), get_the_title()) . $sep . $before . sprintf($text['cpage'], get_query_var('cpage')) . $after;
    } else {
    	if ($show_current) echo $before . get_the_title() . $after;
    }
    

    на такие:

    $title = get_the_title();
    $title_custom = get_post_meta(get_the_ID(), 'title', true);
    if ($title_custom) $title = $title_custom;
    if ( get_query_var('cpage') ) {
    	echo $sep . sprintf($link, get_permalink(), $title) . $sep . $before . sprintf($text['cpage'], get_query_var('cpage')) . $after;
    } else {
    	if ($show_current) echo $before . $title . $after;
    }
    

    Заголовок указывается через произвольное поле с именем «title».

Ваш комментарий