Главная WordPress

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

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

Комментарии (690)

  1. Спасибо за прекрасное решение. Но у меня вопрос. Можно ли в крошках выводить не заголовки страниц, а текст ссылок, которые я задаю при формировании многоуровневого выпадающего меню? Если да, то что и где я должен изменить?

    • Может быть как-то и можно, но я не представляю, как.

      • В консоли Внешний вид → Меню справа есть виджет добавления меню. При добавлении элемента меню, например страницы, сюда автоматически переносится весь заголовок. Но есть возможность задать свой текст для элемента меню. Изменение происходит вроде где-то тут wp-admin/nav-menus.php, но я, к сожалению, php знаю очень поверхностно. Думаю, если в скрипте «хлебных крошек» заменить post_title на заданный текст, то все получится. Или я ошибаюсь? Помогите.

  2. А как быть с Custom Types?

  3. Я вставлял код вывода в taxonomy. php — отображается только главная. Как исправить эту проблему?

  4. Здравствуйте.

    У меня одна запись добавляется сразу в несколько рубрик, но в хлебных крошках отображается только одна (первая по алфавиту). Как сделать, чтобы отображались все рубрики, в которые добавлена запись, например: Главная / Категория 1 / Категория 2 / Запись

  5. Хороший код, правда для кастом-постс и правда требует небольшой модернизации.
    На 190-й строке пришлось указать, из какой такосномии указывать зависимость записи:

    echo get_the_term_list( $post->ID, 'custom-cat', '', ', ', '' );
    echo get_the_term_list( $post->ID, 'custom-tag', '', ', ', '' ) . ' ' . $delimiter . ' ';
    

    Получилось не очень универсально правда… определять бы как-то иерархию таксономий для записей из кастом-постс автоматом, что бы не редактировать каждый раз под новый сайт. Буду признателен за идеи.

  6. Здравствуйте. Возникла следующая проблема: запись находится в рубрике и подрубрике.
    В итоге путь выглядит так: главная > рубрика > запись, т. е. пропадает звено цепочки «подрубрика». Если на странице редактирования записи убрать галочку с «рубрика», а оставить только на «подрубрика», путь превращается в нормальный вид: главная > рубрика > подрубрика > запись. Грешил на плагин «No category parents», отключал его, не помогает. По ряду причин такой вариант крошек меня не устраивает, может подскажете, в чем может быть проблема.

    • Так устроена функция вывода рубрик в цепочке. Это никак не изменить.

      • Ясно, спасибо. Поковырялся в гугле еще вчера, поэкспериментировал и получилось для записей сделать крошки вот таким образом:

        <a href="/">Главная</a> >> <?php
        $args=array('orderby' => 'none');
        $terms = wp_get_post_terms( $post->ID , 'category', $args);
        $t = count($terms);
        $c = 0;
        foreach($terms as $term) {
          $c++;
          echo '<a href="' . esc_attr(get_term_link($term, 'category')) . '" title="' . sprintf( __( "%s" ), $term->name ) . '"' . '>' . $term->name.'</a> ';
          if($c < $t ) echo ' >> ';
        }
        ?> >> <?php the_title(); ?>

        тут полный путь, «иерархия рубрика >> подрубрика» вроде бы сохранена, а не по алфавиту и все на месте. Может кому пригодится.

  7. У меня корректно работает вариант Dimox в т. ч., когда запись находится в рубрике и в подрубрике одновременно.

  8. Спасибо большое !!! Очень кстати, точно под мою задачу.

  9. А как ссылку на рубрику закрыть в «nofollow»? На странице записи?

    <div id="crumbs"><a rel="nofollow" href="http://site.com">Home</a> «<a rel="nofollow» href="http://site.com/rubrika/" title="View all posts in Rubrika">Rubrika</a> «<span class="current">Post</span></div>

    • Нужно заменить эти строки:

      $cat = get_the_category(); $cat = $cat[0];
      echo get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
      echo $before . get_the_title() . $after;
      

      на такие:

      $cat = get_the_category(); $cat = $cat[0];
      $category_parents = get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
      $category_parents = str_replace('<a', '<a rel="nofollow"', $category_parents);
      echo $category_parents;
      echo $before . get_the_title() . $after;
      
  10. Возможно странный вопрос: так что такое «Хлебные крошки»?

  11. Использую qTranslate, как выводить название Главной на двух языках?

    $home = 'ГлавнаяMain'; // текст ссылка «Главная»

    не работает

  12. Очень нужно узнать:
    А разве можно одну запись добавлять в две рубрики? Не приводит ли это к дублированию контента и к санкциям со стороны поисковиков?

  13. Нифига не работает в моем блоге. Сделал крошки через отдельный файл breadcrumbs.php.

  14. Здравствуйте. А как на счёт поддержки пользовательских типов записей?

  15. Возможно ли как-то убрать из title ссылок «Просмотреть все записи в»?
    Похоже это сам WordPress вставляет в titile. Так что мой вопрос скорее «как отредактировать url категории» :)
    Всё делаю на http://ubuntovod.ru, что бы понятней было

    • Можно нескромный вопрос?
      Почему в левом углу твоего сайта всплывает окошечко с надписью о том, что якобы вломали мою страницу в одноглассниках, и она ведёт вот сюда prk15.ru/index.php на очень похожую страницу с предложением ввести номер телефона?

      Господа, кажется в наших рядах честный мошенник!

    • Что-то ты сам себе противоречишь, сначала говоришь про title, потом про url.

      • А возможно как-то эту функцию вызвать в тайтле? Мне надо чтобы тайтл формировался следующим образом: Название поста — Подкатегория — Категория — Блог. Все плагины выводят лишь последнюю подкатегорию и пропускают родительскую рубрику. Просто я подумал по сути, если функция выводит хлебные крошки со всеми подкатегориями, то может быть ее можно было бы запихнуть в тайтл, что-то типо этого:

        <title><?php dimox_breadcrumbs(); ?></title>

        Только сформировать чтобы в обратном порядке выводилось, на основе это функции. Dimox подскажи можно ли реализовать, полезная штука была бы!

      • Блин, не правильно описал. В общем как убрать из title надпись «Просмотреть все записи в»?
        Вот скрин, что бы понятней было: i.imgur.com/OgF3N.jpg

        И Дим, письма с оповещениями о комментах в спам попадают на gmail.

        • Сделай следующее:

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

          if ($thisCat->parent != 0) echo(get_category_parents($parentCat, TRUE, ' ' . $delimiter . ' '));

          на такой код:

          if ($thisCat->parent != 0)  {
          	$cat = get_category_parents($parentCat, TRUE, ' ' . $delimiter . ' ');
          	$cat = str_replace('Просмотреть все записи в', '', $cat);
          	echo $cat;
          }
          

          2) В двух местах найди такую строку:

          echo get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');

          и поменяй ее на этот код:

          $cat = get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
          $cat = str_replace('Просмотреть все записи в', '', $cat);
          echo $cat;
          

          По поводу спама — от меня тут ничего не зависит.

  16. У меня при странице 404 не выводит 'Error 404' (Home «), а при поиске, если результатов больше чем одна страница то на первой выводит просто Page (Home «Page), вместо Результаты поиска по запросу «тест»

    • 1) Error 404 — у меня эта проблема не наблюдается, так что, к сожалению, ничем не могу помочь.

      2) Результаты поиска — да, такая проблема есть и у меня. Обновил функцию, чтобы работало, как надо.

  17. Подскажите пожалуйста как убрать вывод названия статьи (Названия очень длинные и некрасиво на странице смотрятся)
    Главная «Внедрённые решения «Гуково «БГУ8 «Внедрение ПП «1С:Бухгалтерия государственного учреждения 8″ в ГУРО «Гуковская городская СББЖ» г. Гуково Ростовской области
    Заранее большое спасибо!

  18. Дим, вот эта моя просьба с новым вариантом кода не работает, подскажи пожалуйста как быть.

    И другой вопрос. Хочу сделать отображение хлебных крошек немного по другому. Начал ковырять css, но вот интегрировать стиль как мне нужно не смог. Подскажи пожалуйста как так сделать.
    В общем нужно, что бы помимо всех div’ов, которые ты прописал в скрипте, нужно, что бы у крошек добавлялся «родительский» класс one и следующая крошка была в классе two. Вот как-то так что бы выглядел стиль крошек «Главная › Интерфейс › Новые иконки»:

    <div class="one">Главная ›
          <div class="two">
             <div class="one">Интерфейс ›
                   <div class="two">
                      <div class="one">Новые иконки ›</div>
                   </div>
             </div>
          </div>
    </div>

    Просто совсем запутался в коде и не могу понять как это сделать. Помоги пожалуйста с этими двумя вопросами, очень нужно.
    Надеюсь всё правильно объяснил.

    • 1) После этой строки:

      if ($showCurrent == 0) $cats = preg_replace("/^(.+)s$delimiters$/", "$1", $cats);

      вставь эту:

      $cats = str_replace('Просмотреть все записи в', '', $cats);

      2) Это невозможно сделать.

      • Эх, жаль, что невозможно.
        А может тогда можно сделать хотя бы так:

        <div class="kroshka">Главная ›</div> <div class="kroshka">Интерфейс ›</div> <div class="kroshka">Новые иконки</div>

        Только нужно, что бы в див kroshka обязательно входил символ «›», но не было пробела после этого символа.

        Помоги пожалуйста. Пытался сам сделать, но не везде прописывается, а иногда вообще весь код рушит.

  19. Приветствую. Спасибо за хороший код!

    Есть одна проблема на странице 3го уровня вложенности типа:
    example.com/page1/page2/page3
    Так вот на page3 между page1 и page2 в хлебных крошках нет разделителя — ссылки идут слитно.

    Как это побороть?
    Спасибо.

  20. если запись без рубрики (или больше чем в одной рубрике) выводит ошибку

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