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

Всем привет!

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

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

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
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 '<div id="crumbs"><a href="' . $homeLink . '">' . $home . '</a></div>';
 
} else {
 
echo '<div id="crumbs"><a href="' . $homeLink . '">' . $home . '</a> ' . $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 '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $delimiter . ' ';
echo '<a href="' . get_month_link(get_the_time('Y'),get_the_time('m')) . '">' . get_the_time('F') . '</a> ' . $delimiter . ' ';
echo $before . get_the_time('d') . $after;
 
} elseif ( is_month() ) {
echo '<a href="' . get_year_link(get_the_time('Y')) . '">' . get_the_time('Y') . '</a> ' . $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 '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a> ' . $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 '<a href="' . get_permalink($parent) . '">' . $parent->post_title . '</a> ' . $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[] = '<a href="' . get_permalink($page->ID) . '">' . get_the_title($page->ID) . '</a>';
$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 '</div>';
 
}
}

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

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

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

1
<div id="content">

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

Хлебные крошки для 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 (без Вом). ➡

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

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

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