На многих сайтах, особенно имеющих сложную многоуровневую структуру можно встретить навигацию под названием хлебные крошки (breadcrumb). Она представляет собой цепочку ссылок от главной страницы до той, на который вы находитесь в данный момент.
И вот создавая очередной шаблон для WordPress, передо мной встала задача создания такой навигации в шаблоне.
К сожалению в рунете ничего подходящего не нашлось, в основном все ссылки вели на установку дополнительного плагина, а я придерживаюсь того мнения, что если можно воспользоваться стандартными функциями WP, плагин ставить не обязательно. К тому же заказчику нужно сдать готовую тему, без оговорок на то, что для ее работы нужен специальный плагин.
В общем решение нашлось довольно быстро в англоязычном блоге, за что ему большое спасибо.
Я не буду переводить статью дословно, сразу переду к сути. Автор статьи, написал скрипт, создающий довольно простую навигацию хлебных крошек:
function my_breadcrumb() { if ( !is_front_page() ) { echo '<p class="breadcrumb"><span class="breadcrumb_info">You are here:</span> <a href="'; echo get_option('home'); echo '">'; bloginfo('name'); echo "</a> » "; } if ( is_category() || is_single() ) { $category = get_the_category(); $ID = $category[0]->cat_ID; echo get_category_parents($ID, TRUE, ' » ', FALSE ); } if(is_single() || is_page()) {the_title();} if(is_tag()){ echo "Tag: ".single_tag_title('',FALSE); } if(is_404()){ echo "404 - Page not Found"; } if(is_search()){ echo "Search"; } if(is_year()){ echo get_the_time('Y'); } echo "</p>"; }
Автор использует условные теги WP, для проверки какую рубрику, запись или страницу мы просматриваем в данный момент. Скрипт не выводит навигацию, если мы находимся на главной странице.
if ( is_category() || is_single() ) { $category = get_the_category(); $ID = $category[0]->cat_ID; echo get_category_parents($ID, TRUE, ' » ', FALSE ); }
Это самая сложная часть скрипта, поскольку здесь применяются редко используемые функции WordPress, для получения всех родительских рубрик текущей рубрики или поста.
if(is_single() || is_page()) {the_title();} if(is_tag()){ echo "Tag: ".single_tag_title('',FALSE); } if(is_404()){ echo "404 - Page not Found"; } if(is_search()){ echo "Search"; } if(is_year()){ echo get_the_time('Y'); }
Здесь все довольно просто, используются условные комментарии для указания различных сценариев скрипта, таких как переход по метке, комментарию, архиву за месяц, 404 страница и др.
Этот скрипт достаточно доавить в файл functions.php, и после этого вы можете вызвать функцию навигации, в шаблоне всего лишь одной строчкой:
<?php my_breadcrumb(); ?>
В результате мы получили очень легкую версию скрипта навигации breadcrumb (хлебные крошки), без установки каких-либо дополнительных плагинов.
Здорово! Спасибо большое за статью, вставил у себя в блог этот скрипт. Результат можно посмотреть в любом посте в моем блоге. :)
Появился вопрос — как сделать так, чтобы текст ссылки на главную брался не с титла главной, а самому туда написать, что хочешь?
В первом абзаце вместо:
bloginfo('name');
можно написать:
echo "Любой текст";
Прощу прощенья, случайно удалила комментарий с вопросом как в хлебных крошках вывести название целевой страницы жирным шрифтом. Отвечаю:
в первой строчке последнего абзаца:
if(is_single() || is_page()) {the_title();}
внутри скобок
the_title()
, добавтье в кавычках через запятую открывающий и закрывающий тэг:неплохо, но с включёнными пермалинками не работают архивы)(type=»monthly»)
может быть, автор скрипта говорил о том что это очень простая реализация хлебных крошек
dreamhelg, спасибо, все работает! Теперь посмотрим, будет ли эффект в плане повышения Pr
почаще пишите интересные статьи, и будет хороший Pr, а хлебные крошки это небольшое дополнение
Код можно сразу в сайдбар воткнуть без всяких функций и инклюдов, а вот в индексе он у меня чего-то не заработал, инклюдом тоже не прокатило… :( Убрал пока…
Еще не получилось заменить почему-то цепочку ешо одной командой… как сделать?
echo get_option(‘home’); echo ‘»>’; bloginfo(‘name’); echo « » «;
Понятное дело что можно без функций, просто так аккуратнее, да и автор скрипта так написал. По поводу замены цепочки echo, вроде бы можно просто написать через точку, примерно так:
echo get_option(’home’).">".bloginfo(’name’).">"
Вроде бы должно работать, но не проверяла, не знаю.Плагин для комментов обязательно сегодня поставлю.
блин, извиняюсь, забыл дописать.
Поставьте, пожалуйчта, плагин «подписаться на комменты», а то постоянно заходить проверять не удобно… Чего никто не ставит ???
Здравсвуйте, а как добавить последней ссылке в крошках,какой нибудь id ,чтоб можно было стиль можно было применить?
Спасибо! Да, все прекрасно работает))
За исключением одной незначительной неприятности: В медиабиблиотеке, когда нажимаю под картинкой «Просмотреть», — выходит ошибка: Catchable fatal error: Object of class WP_Error could not be converted to string in /home/…/functions.php on line 56
А эта самая строчка 56 выглядит так:
echo get_category_parents($ID, TRUE, ' » ', FALSE );
В остальном — все нормально)) Как можно исправить?
Заранее благодарю за ответ!
Хлебные крошки называются так по ироничной аналогии со сказкой, в которой дети, когда их завели в лес во второй раз, не смогли найти обратную дорогу, так как на этот раз вместо маленьких камешков они оставляли за собой хлебные крошки, впоследствии склеванные лесными птицами.