Хлебные крошки для WordPress

Хлебные крошки для Wordress сайта или блога

"Хлебные крошки" - это навигационные ссылки, которые не только облегчают навигацию по сайту, но и улучшают перелинковку страниц сайта. Добавить хлебные крошки на WordPress сайт не составит труда, потому что для этого разработаны специальные плагины и php функции.

Хлебные крошки на WordPress с помощью плагина

Breadcrumb NavXT - пожалуй лучший плагин для размещения хлебных крошек на WordPress сайте. Установить этот плагин можно прямо в админке WordPress, введя название плагина в поле поиска плагинов. После установки плагина, необходимо немного отредактировать шаблон вашей темы и добавить в него следующий код. Код можно добавить в файл header.php перед основным контентом, но все зависит от используемой темы.

<div class="crumb">
<?php if(function_exists('bcn_display')) { bcn_display(); } ?>
</div>

Этот плагин удобен тем, что хлебные крошки можно настроить именно так, как это вам необходимо. В том числе, плагин поддерживает произвольные таксономии и типы записей.

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

Также, хлебные крошки на WordPress сайт можно поставить без использования плагинов. Этот способ не самый простой, но при достаточных знаниях PHP очень гибкий. Для размещения хлебных крошек на WordPress необходимо добавить следующий код в файл functions.php:

 /* Хлебные крошки */
function my_breadcrumbs( $sep=' » ', $term=false, $taxonomies=false ){
global $post, $wp_query, $wp_post_types;
&nbsp;&nbsp; &nbsp;// для локализации
&nbsp;&nbsp; &nbsp;$l = (object) array(
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;'home' => 'Главная'
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;,'paged' => 'Страница %s'
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;,'p404' => 'Ошибка 404'
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;,'search' => 'Результаты поиска по зпросу - <b>%s</b>'
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;,'author' => 'Архив автора: <b>%s</b>'
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;,'year' => 'Архив за <b>%s</b> год'
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;,'month' => 'Архив за: <b>%s</b>'
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;,'attachment' => 'Медиа: %s'
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;,'tag' => 'Записи по метке: <b>%s</b>'
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;,'tax_tag' => '%s из "%s" по тегу: <b>%s</b>'
&nbsp;&nbsp; &nbsp;);

&nbsp;&nbsp; &nbsp;if( $paged = $wp_query->query_vars['paged'] ){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$pg_patt = '<a href="%s">';
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$pg_end = '</a>'. $sep . sprintf($l->paged, $paged);
&nbsp;&nbsp; &nbsp;}

&nbsp;&nbsp; &nbsp;if( is_front_page() )
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return print ($paged?sprintf($pg_patt, get_bloginfo('url')):'') . $l->home . $pg_end;

&nbsp;&nbsp; &nbsp;if( is_404() )
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = $l->p404; 

&nbsp;&nbsp; &nbsp;elseif( is_search() ){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$s = preg_replace('@<script.*@i', 'Недопустимые символы', $GLOBALS['s']);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = sprintf($l->search, $s);
&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;elseif( is_author() ){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$q_obj = &$wp_query->queried_object;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = ($paged?sprintf( $pg_patt, get_author_posts_url($q_obj->ID, $q_obj->user_nicename) ):'') . sprintf($l->author, $q_obj->display_name) . $pg_end;
&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;elseif( is_year() || is_month() || is_day() ){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$y_url = get_year_link( $year=get_the_time('Y') );
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$m_url = get_month_link( $year, get_the_time('m') );
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$y_link = '<a href="'. $y_url .'">'. $year .'</a>';
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$m_link = '<a href="'. $m_url .'">'. get_the_time('F') .'</a>';
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( is_year() )
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = ($paged?sprintf($pg_patt, $y_url):'') . sprintf($l->year, $year) . $pg_end;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;elseif( is_month() )
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = $y_link . $sep . ($paged?sprintf($pg_patt, $m_url):'') . sprintf($l->month, get_the_time('F')) . $pg_end;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;elseif( is_day() )
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = $y_link . $sep . $m_link . $sep . get_the_time('l');
&nbsp;&nbsp; &nbsp;}

&nbsp;&nbsp; &nbsp;// Страницы и древовидные типы записей
&nbsp;&nbsp; &nbsp;elseif( $wp_post_types[$post->post_type]->hierarchical ){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$parent = $post->post_parent;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$crumbs=array();
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;while($parent){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; $page = &get_post($parent);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; $crumbs[] = '<a href="'. get_permalink($page->ID) .'" title="">'. $page->post_title .'</a>'; //$page->guid
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; $parent = $page->post_parent;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$crumbs = array_reverse($crumbs);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;foreach ($crumbs as $crumb)
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out .= $crumb.$sep;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = $out . $post->post_title;
&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;else // Таксономии, вложения и не древовидные типы записей
&nbsp;&nbsp; &nbsp;{
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Определяем термины
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(!$term){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( is_single() ){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( !$taxonomies ){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$taxonomies = get_taxonomies( array('hierarchical'=>true, 'public'=>true) );
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( count($taxonomies)==1 ) $taxonomies = 'category';
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if ( !$post ) $post = $wp_query->get_queried_object(); // Jпределяем глобальную переменную, чтобы работало без шаблонов!!!
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( $term = get_the_terms( $post->post_parent?$post->post_parent:$post->ID, $taxonomies ) )
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$term = array_shift($term);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$term = $wp_query->get_queried_object();
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( !$term && !is_attachment() )
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;return print "Error: Taxonomy isn`t defined!"; 

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$pg_term_start = $paged ? sprintf( $pg_patt, get_term_link( (int)$term->term_id, $term->taxonomy ) ) : '';

&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( is_attachment() ){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if(!$post->post_parent)
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = sprintf($l->attachment, $post->post_title);
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = crumbs_tax($term->term_id, $term->taxonomy, $sep) . "<a href='". get_permalink($post->post_parent) ."'>". get_the_title($post->post_parent) ."</a>{$sep}{$post->post_title}"; //$ppost->guid
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;elseif( is_single() )
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = crumbs_tax($term->parent, $term->taxonomy, $sep) . "<a href='". get_term_link( (int)$term->term_id, $term->taxonomy ) ."'>{$term->name}</a>{$sep}{$post->post_title}";
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;// Метки или произвольные одноуровневые таксономии
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;elseif( !is_taxonomy_hierarchical($term->taxonomy) ){
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;if( is_tag() )
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = $pg_term_start . sprintf($l->tag, $term->name) . $pg_end;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else {
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$post_label = $wp_post_types[$post->post_type]->labels->name;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$tax_label = $GLOBALS['wp_taxonomies'][$term->taxonomy]->labels->name;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = $pg_term_start . sprintf($l->tax_tag, $post_label, $tax_label, $term->name) .&nbsp; $pg_end;
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;}// Рубрики и таксономии
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;else
&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;$out = crumbs_tax($term->parent, $term->taxonomy, $sep) . $pg_term_start . $term->name . $pg_end;
&nbsp;&nbsp; &nbsp;}

$home = '<a href="'. get_bloginfo('url') .'">'. $l->home .'</a>' . $sep;

return print $home . $out;
}
function crumbs_tax($term_id, $tax, $sep){
$termlink = array();
while( (int)$term_id ){
$term2 = get_term( $term_id, $tax );
$termlink[] = '<a href="'. get_term_link( (int)$term2->term_id, $term2->taxonomy ) .'">'. $term2->name .'</a>'. $sep;
$term_id = (int)$term2->parent;
}
$termlinks = array_reverse($termlink);
return implode('', $termlinks);
}

После этого нужно вызвать эту функцию в файле header.php следующим образом:

<div class="bbcrumb"><?php my_breadcrumbs(); ?></div>