Как сделать цепочку навигации (breadcrump) в WordPress
Немного отойду от экспедиции и поделюсь очередной полезняшкой для WordPress.
Цепочка навигации (она же breadcrump) — это полный путь от начальной страницы до текущей, состоящий из отрезков пути, каждый из которых является разделом сайта.
![]()
Пример цепочки навигации с custom taxonomies.
Штука очень полезная, но многие сайтоделы пренебрегают ей. Для WordPress есть некоторые плагины. В целом, их функционала вполне достаточно. Но бывают случаи, когда архитектура сайта на WordPress усложнена персонализированными типами постов и таксономиями.
Те, кто работают и/или пробовали использовать custom taxonomies наверняка столкнулись с проблемой шаблонов и «красивых» ссылок (niceurls). В Lightppd так вообще нереально их нереально настроить. В некоторых своих проектах я использовал шаблоны статичных страниц для избавления вышеупомянутой проблемы. И вот один из последних заказчиков попросил внедрить в его сайт навигационную штуку аКа breadcrump.
Делюсь полным кодом функции, которую я написал специально под проект заказчика.
function the_breadcrumb() {
global $post;
$link_EOS = '<a href="';
$link_CON = '">';
$link_EOF = '</a>';
$sep = ' » ';
if (!is_home()) {
# если не на главной, то начинаем показывать цепочку с ссылки на главную страницу сайта
echo $link_EOS . get_option('home') . $link_CON . "Главная" . $link_EOF . $sep;
if (is_category() || is_single()) {
# категория
the_category('title_li=');
if (is_single()) {
# single post / custom post type
# get_page_link(8) - генерирует ссылку на шаблон продуктов (custom post type) под ID 8
echo $link_EOS . get_page_link(8) . $link_CON . "Продукты" . $link_EOF . $sep;
the_title(); # текущая страница без ссылки
}
} elseif (is_page()) {
if ( $post->post_parent != 0) {
# обычные статичные страницы
echo $link_EOS . get_page_link($post->post_parent) . $link_CON . get_the_title($post->post_parent) . $link_EOF . $sep;
}
echo the_title(); # текущая страница
} elseif (isset($_GET['action'])) {
# специальный случай, когда не используются шаблоны WordPress,
# но используется функционал движка в отдельных файлах вне шаблона
# доступ к таким файлам обеспечивается ссылкой вроде
# get_bloginfo('url) . /shoppingcart/index.php?action=xxxxx
switch ($_GET['action']) {
case "rent":
$title = ucfirst("аренда оборудования");
break;
case "sell":
$title = ucfirst("продажа оборудования");
break;
case "feedback":
$title = ucfirst("обратная связь");
break;
default:
$title = "";
}
echo $title;
} elseif (is_tax()) {
# персонализированные таксономии
$curr_tax = get_taxonomy(get_query_var('taxonomy'));
$curr_term = get_term_by('slug', get_query_var('term'), get_query_var('taxonomy'));
if (!empty($curr_term)) {
# специальный случай, когда таксономия подключается в аутлайне сайта через шаблон страницы
# каждой таксономии соотвествует ID определенной страницы
switch ($curr_tax->name) {
case "topografia":
$pageid_fortax = "10";
break;
case "escanerlaser":
$pageid_fortax = "11";
break;
case "controlmaquinaria":
$pageid_fortax = "12";
break;
case "mapping":
$pageid_fortax = "13";
break;
case "arriendo":
$pageid_fortax = "14";
break;
}
# генерируем полную ссылку цепочки
$newtitle = $link_EOS . get_page_link($pageid_fortax) . $link_CON . $curr_tax->label . $link_EOF . $sep . $curr_term->name;
} else {
# если мы в начале таксономии
$newtitle = $curr_tax->label;
}
echo $newtitle;
}
}
}
Я постарался документировать код везде, где могут возникнуть какие-то непонятки. В принципе все очень просто. В этой функции есть также поддержка того случая, когда вы используете функции WordPress в файлах, находящихся вне шаблона сайта и имеющих свои отдельные предназначение и структуру.
Код добавляете в functions.php и вызываете простым echo там, где нужно.
Спасибо! полезная статья, много чего узнала
На эту запись ссылаются: