Как сделать хлебные крошки для WordPress без плагина

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

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

Хлебные крошки для WordPress без плагина

Как вы уже наверняка знаете, практически все в WordPress можно реализовать как с помощью плагина, так и без его использования.

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

Как сделать хлебные крошки WordPress без плагина?

Делается все довольно просто и всего в 2 этапа.

На первом этапе необходимо добавить функцию этих самых «хлебных крошек» (англ. — breadcrumbs) в ваш шаблон WordPress, для чего в файл functions.php (в самый конец перед ?>) шаблона вставить следующий код:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function breadcrumbs() {
$showOnHome = 0; // 1 - показывать "хлебные крошки" на главной странице, 0 - не показывать
$delimiter = '»'; // разделить между "крошками"
$home = 'Главная'; // текст ссылка "Главная"
$showCurrent = 1; // 1 - показывать название текущей статьи/страницы, 0 - не показывать
$before = '<span class="current">'; // тег перед текущей "крошкой"
$after = '</span>'; // тег после текущей "крошки"
 
global $post;
$homeLink = get_bloginfo('url');
 
if (is_home() || is_front_page()) {
 
if ($showOnHome == 1) echo '

‘; } else { echo ‘

‘ . $home . ‘ ‘ . $delimiter . ‘ ‘; if ( is_category() ) { global $wp_query; $cat_obj = $wp_query->get_queried_object(); $thisCat = $cat_obj->term_id; $thisCat = get_category($thisCat); $parentCat = get_category($thisCat->parent); if ($thisCat->parent != 0) echo(get_category_parents($parentCat, TRUE, ‘ ‘ . $delimiter . ‘ ‘)); echo $before . single_cat_title(», false). $after; } elseif ( is_day() ) { echo ‘‘ . get_the_time(‘Y’) . ‘ ‘ . $delimiter . ‘ ‘; echo ‘‘ . get_the_time(‘F’) . ‘ ‘ . $delimiter . ‘ ‘; echo $before . get_the_time(‘d’) . $after; } elseif ( is_month() ) { echo ‘‘ . 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; echo ‘‘ . $post_type->labels->singular_name . ‘ ‘ . $delimiter . ‘ ‘; if ($showCurrent == 1) echo $before . get_the_title() . $after; } else { $cat = get_the_category(); $cat = $cat[0]; echo get_category_parents($cat, TRUE, ‘ ‘ . $delimiter . ‘ ‘); 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]; echo get_category_parents($cat, TRUE, ‘ ‘ . $delimiter . ‘ ‘); echo ‘‘ . $parent->post_title . ‘ ‘ . $delimiter . ‘ ‘; if ($showCurrent == 1) echo $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[] = ‘‘ . get_the_title($page->ID) . ‘‘; $parent_id = $page->post_parent; } $breadcrumbs = array_reverse($breadcrumbs); foreach ($breadcrumbs as $crumb) echo $crumb . ‘ ‘ . $delimiter . ‘ ‘; if ($showCurrent == 1) echo $before . get_the_title() . $after; } elseif ( is_search() ) { echo $before . ‘Результаты поиска по запросу «‘ . get_search_query() . ‘»‘ . $after; } elseif ( is_tag() ) { echo $before . ‘Записи с тегом «‘ . single_tag_title(», false) . ‘»‘ . $after; } elseif ( is_author() ) { global $author; $userdata = get_userdata($author); echo $before . ‘Статьи автора ‘ . $userdata->display_name . $after; } elseif ( is_404() ) { echo $before . ‘Error 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 ‘

‘; } }

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

Для этого необходимо добавить в файлы single.php, page.php, archive.php, search.php шаблона следующий код:

1
<!--?php if (function_exists('breadcrumbs')) breadcrumbs(); ?-->

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

То есть как показано на рисунке:

Хлебные крошки для WordPress без плагина

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

Напоследок добавлю, что разработчиком данной функции является известный блогер Dimox.

Комментарии 22

  • Ничего себе кодик 😮 Никогда раньше не задумывался о хлебных крошках, хотя частенько слышу от разных блогеров разные советы.Так вот сейчас из-за вас я обращу на это больше внимание.У меня в шаблоне скорей всего уже предусмотрена эта функция, так как отражается перед заголовком прошедшая статья, но… не отражается рубрика и главная как у вас на картинке! Наверно попробую сейчас внести этот код, посмотрим что произойдёт, спасибо!

    • Игорь, код и действительно впечатляет своим объемом 🙂 ! Попробуйте, все должно получиться, только не лишним будет сделать резервные копии файлов!

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

    • Игорь, абсолютно не загрузили 🙂 !
      В зависимости от того, где хотите отображать хлебные крошки, вставлять код нужно в соответствующие файлы. Я добавил во все перечисленные.
      На счет конструкции вы абсолютно правы, в некоторых шаблонах она может быть другой и надо смотреть по ситуации. Если нужна помощь, то скиньте мне на e-mail какой-нибудь из перечисленных файлов, попробую разобраться 😉

  • Владимир, здравствуйте. Спасибо за статью, но так как у меня шаблон повернутый на всю голову, то даже и пытаться не буду. А вот на будущее пригодиться. ➡

    • Здравствуйте, Андрей ➡ ! Да уж, специфичный шаблон порой значительно затрудняет выполнение самых простых действий.

  • Владимир,сделал все как описано вами в статье!Вставил все коды во все файлы и… никакого изменения!Как было так и осталось 😮

  • Владимири,конечно же так просто не разобратся!! Я поискал похожие статьи на вашу в интернете и там была абсолютно такая же информация,поэтому скорей всего проблема в самом шаблоне.Лично мое мнение такое: ведь я сказал что в моем шаблоне уже предусмотрены такие функции так как выводятся хлебные крошки(по минимуму) поэтому наверно уже существует похожий код и когда я добовляю ваш,то коды конфликтуют и ничего не происходит.Как вы думаете,возможен такой вариант? Наверно не буду заморачиваться с этим делом,ведь это не самое главное в блогинге и в бизнесе 😮 Если найду свободное время,так может поковыряюсь там!В любом случае большое спасибо вам за этот пост и за желание помочь ➡

    • Игорь, у вас в шаблоне не «хлебные крошки», а ссылка на предыдущую статью. Скорее всего причина возникновения проблемы не в этом. Предлагаю вам проверить правильность вставки кода в functions.php, а также вставить второй код после конструкции < div class="art-Post-inner art-article" > в файлы вашего шаблона 💡

  • Ладно, возможно решение придет позже! Пожалуйста, Игорь, обращайтесь 🙂 !

  • Я конечно понимаю, что кодом вставить хлебные крошки это не проблема — но действительно так важно их наличие?
    Кроме этого хотелось бы понять, почему сразу же код не разметили микроразметкой — ведь новичкам будет сложно разобраться и правильно разметить (а ведь автору кода это сделать не сложно).

    • Юрий, не буду утверждать, что наличие хлебных крошек очень важно для сайта, кто-то делает их, а кто-то нет, тут на усмотрение каждого конкретного человека.
      На счет микроразметки не совсем понял, было бы неплохо увидеть на наглядном примере что вы имели виду (видать я чего-то может еще не знаю) 🙂
      В любом случае новичок врядли сможет разобраться в данном коде, скорее всего он просто его выделит и скопирует, если решит реализовать себе хлебные крошки.

  • А вот напишите мне не понимающему — какой эффект эти крошки дают?
    Они повышают поведенческие факторы, посещаемость или как картина на стене в комнате придает эстетический вид просто?
    Да, прикольно, согласен, но с первого взгляда и не поймешь, если не обратить внимание — есть эти крохи или нет, честно.
    Вот поделитесь опытом, Владимир, у вас кликают по заголовкам от крошек? Вы в вебвизоре анализ делаете? Я иногда прозреваю, когда смотрю куда кликают читатели, а какие кнопки просто игнорят, хотя я их изначально считал супер-пупер-мега нужными для них.
    😐

    • Николай, данные крошки предназначены скорее как некий помощник для навигации по сайту.
      В вебвизоре анализ кликов по ним не проводил, вообще Яндекс.Метрику только недавно себе установил.
      Если честно, то какого-либо вреда или пользы от них я не заметил, а раз уж так, то действовал на свое усмотрение и оставил их.

  • А! Так вот, что это за «крошки» такие! А я всё слышу: «Хлебные крошки-хлебные крошки». Думаю, что за ерунда. А код действительно замороченный. Может лучше плагин использовать?

    • С точки зрения простоты реализации конечно проще воспользоваться плагином, но во всем остальном использование кода предпочтительнее. Код в файлах плагина наверняка даже сложнее представленного)

  • У меня при установке возникла проблема :cry:, вместо Главная » отображались крякозябры, немножко погуглив проблема была решена. Через notepad++ открыл файлы single.php, page.php, archive.php, search.php и сохранил в UTF-8 (без Вом). ➡

  • Здраствуйте, подскажите пожалуйста нужно ли ставить ссылку на главную страницу в конце статьи для продвижения, если в плагине хлебные крошки уже есть ссылка на главную страницу в статье?

Добавить комментарий

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

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.

Adblock
detector