Главная WordPress

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

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

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

  1. Упс, мой косяк!(все отлично работает, спасибо!)

  2. Отличное рабочее решение! Благодарен автору.

  3. if ($show_current) {
    if ($position ≥ 1)
    echo $sep. $before. get_the_title (). $after; // - здесь не учитывается «position»
    } elseif ($show_last_sep) echo $sep;

    в своих проектах делаю так:

    if ($show_current) {
    $position += 1;
    if ($position ≥ 1)
    echo $sep. $before. get_the_title (). sprintf ($after, $position); // - здесь учитывается «position»
    } elseif ($show_last_sep) echo $sep;

    кусок кода взят для примера, такая проблема присутствует в большинстве условий if ($show_current){ … } (возможно во всех, но не утверждаю, так как все не проверял)

  4. Привет! Классная работа проделана! У меня вопрос:
    дело в том, что у меня нет категорий, идет сразу url/news_post/text_of_post
    Где news_post это рубрика.
    Отображение на сайте верное, только ссылка на новости имеет такой вид url/category/news_post/ и получается ведет на несуществующую страницу

    Вот скрин на всякий случай, чтобы более наглядно i.imgur.com/tLiNFbo.png

    PS Сайт сейчас на локальном компе

  5. Код использую уже много лет, но вот заметил ошибку.
    Есть две испытуемые статьи. Всё обычно: одна главная (корневая) рубрика и одна подрубрика.
    Так вот прикол в том, что из одной определённой главной рубрики код ваших крошек от 2017 года не выводит ни одну подрубрику! С другими категориями работает нормально.

    Поэтому забрёл сюда в поисках новой версии и установил её. Подрубрики стали выводиться!
    Но радость длилась не долго, т.к. я обнаружил статью из другой главной рубрики, в которой не отображаются подрубрики кодом 2019 года, но отображаются старым кодом 2017!!!
    Плагин Breadcrumb NAVXT правильно отображает обе статьи. Не хочется плагин ставить, может подскажете куда хоть копать?

  6. Пока что решил вопрос так: проверяются все подкатегории поста на длину цепочки и выбирается первая самая длинная цепочка. Таким образом получилось ещё выводить больше подкатегорий для постов, которые состояли во многих категориях, включая только корневую.
    $max=-1;
    foreach ($cat as $category){
    $parents1 = get_ancestors ($category→cat_ID, 'category');
    if (count ($parents1)>$max) {
    $max=count ($parents1);
    $catID = $category→cat_ID;
    $parents = $parents1;
    }
    }

  7. Здравствуйте. Могли бы подсказать как сделать? Вот у меня услуги выводятся страницами. Я добавил их в родительские категории, и сейчас выводится — Главная — Род. категория — Страница
    можно сделать — Главная — Страница?

  8. Не выводятся хлебные крошки на странице вывода записей (то есть в файле index. php).
    В чем может быть дело и как это исправить?

  9. Здравствуйте !

    В статье вы пишите:
    «Функцию необходимо поместить в файл functions. php вашей WordPress-темы. После этого в то место шаблона, где хотите выводить „хлебные крошки“, добавьте следующий код:»

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

  10. Подскажите пожалуйста, это у меня ошибка или этот код не работает на index. php странице? Суть проблемы: есть страница блога она формируется у меня с помощью index.php. При размещении

    <?php echo dimox_breadcrumbs(); ?>

    ничего выводится, хотя на внутренних страницах код работает. Может стоит для блога отдельную tpl-blog.php сделать?

  11. СПАСИБО!

  12. Здравствуйте !
    Подскажите пожалуйста как с помощью вашего кода можно добавить мультиязычность ссылке на главную?
    $text['home'] = pll_e ('fl-breadcrumbshome'); // текст ссылки «Главная»

    С плагином полиланг, выше показал как не работает, подскажите пожалйста что не так ?(

  13. Здравствуйте! Гугл ругается на отсутствие значения в поле position

    Хотя фактически оно там есть. Как это можно исправить?

  14. Здравствуйте. Все круто, всегда пользовался. Но щас на вукомерсе поставил, тема нулевая (своя) ничего особого.
    remove_action ('woocommerce_before_main_content','woocommerce_breadcrumb', 20);
    add_action ('woocommerce_before_main_content','dimox_breadcrumbs', 20);
    так вывожу, в категориях товаров, не выводится, только ссылка на главную, на странице магазина выводится. Подскажите, что можно сделать?

    примерный линк
    site.ru/product-category/sortovoj-prokat/

  15. Добрый день! Очень благодарен за эту крутую разметку. Скажите, а можно ли заставить работать крошки через какой-то шорткод […]?

  16. Здравствуйте!

    Использовал функцию, всё отображается, путь полный, но есть проблема — не работает переход в родительский раздел:

    Находясь по адресу «Главная>Услуги>Услуга 1» не могу перейти на страницу «Услуги» — при клике просто обновляется текущая страница.

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

    P.S. Нашел в интернете версию функции от 2017 г. — всё работает, но там гугл ругается на position.

  17. А можно ли перевести значение %2 $s если я хочу сделать перевод хлебных крошек. Суть такова, что иерархия получается такая (Главная — Блог — Название статьи), вот соответственно Блог хочу перевести на английский. Может какой-то инной есть способ вывести название ссылки?

  18. Спасибо за код)) очень пригодился))

  19. Спасибо за работу!

    Перечитал все комменты. Близкий ответ к своей проблемме нашел на 13 странице комментариев про произвольное поле с title. Сделал все как вы советовали. Изменил ваш код, создал произвольное поле с title, но эффекта не увидел.

    А можно просто вызывать в хлебных крошках не тайтлы страницы, а заголовки h1?

    • Произвольные поля у меня прописанны в functions. php следующим образом:

      function get_any_fild($field, $pid = NULL) {
      	if (is_category()) {
      		$term_description = $pid->queried_object->description;
      	    if ($term_description) {
      	        preg_match ('![' . $field . '="(.*)"]!iU', $term_description, $match);
      	    }
      		$meta = ($match[1] ? $match[1] : ($field != 'term_description' ? single_cat_title('', false) : NULL));
      		/*if ($paged = get_query_var('paged')) {
      			$meta = $meta . ' стр. ' . $paged;
      		}*/
      	} else {
      		$meta = get_post_meta($pid, $field, true);
      		if (empty($meta)) {
      			$meta = the_title();
      		}
      	}
      	return $meta;
      } 
      
      • Есть еще вариант просто дать ограничение на количество слов в названии каждой хлебной крошки:

        trim_title_words(5, '...')

        C помощью функции:

        function trim_title_words($count, $after) {
         $title = get_the_title();
         $words = split(' ', $title);
         if (count($words) > $count) {
         array_splice($words, $count);
         $title = implode(' ', $words);
         }
         else $after = '';
         echo $title . $after;
        }

        Но пока не понял как это прикрутить к вашему коду.

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