Плагин «Хлебные крошки»

Плагин хлебные крошки

Сегодня я расскажу о плагине для WordPress под народным названием «Хлебные крошки», официальное название Breadcrumb NavXT. Это пожалуй самый востребованный и популярный плагин среди веб мастеров. Его популярность связана с двумя причинами.

Первая причина популярности плагина «Хлебные крошки»

Содержание

Это удобство для навигации по сайту. После установки и настройке плагина Breadcrumb NavXT в верхней части страницы появляется удобное меню навигации которое поэтапно показывает пользователю не только название страницы на которой он находится но и последовательно все страницы сайта на которых он побывал ранее. Что безусловно очень удобно, особенно при изучении большого количества материала и просмотра нескольких страниц.

Хлебные крошки плагин вордпресс

Вторая причина востребованности этого плагина

Дополнительная перелинковка страниц, и как следствие + в ранжировании поисковиков. (Собственно, прозвище «Хлебные крошки» произошло от сказки братьев Гримм под названием Гензель и Гретель по сюжете которой дети чтобы не заблудится в лесу бросали хлебные крошки… Но это так, лирическое отступление.) Вернёмся всё же к нашему плагину.

Скачиваем и устанавливаем плагин Breadcrumb NavXT.

Скачать плагин Breadcrumb NavXT лучше всего, найдя его через свою панель управления введя в строке поиска «Breadcrumb NavXT«

Установка плагина Breadcrumb NavXT

Настройка плагина Breadcrumb NavXT

Установка обычная ничем не отличается от установки остальных плагинов. А вот с настройками придётся повозиться.

Настройка плагина Breadcrumb NavXT

Переходим по вкладке «Параметры»…

Установка и настройка плагина Breadcrumb NavXT

… и попадаем в панель настроек плагина Breadcrumb NavXT. В данном случае нас интересует только вкладка«Основные», все остальные вкладки настроек: «Записи и страницы», «Таксономии», «Другое», можно оставить пока без изменений. Возможно вам когда то придётся к ним вернуться чтобы более продвинуто настроить Хлебные крошки, но а пока оставляем всё как есть. Ну а настройки вкладки «Основные» изменяем как показано на картинке ниже:

Плагин хлебные крошки

Плагин Breadcrumb NavXT инструкция по установке

Плагин Breadcrumb NavXT настройка

Сохраняем изменения настроек, и на этом здесь все.

Теперь приступаем к самому интересному.

Необходимо отредактировать шаблон вашей темы.

К сожалению без этого никак нельзя. Плагин Breadcrumb NavXT, «просто так» работать не будет.

Переходим в консоль и выбираем «Внешний вид»→«Редактор»:

Установка плагина Breadcrumb NavXT и регулировка

В результате переходим в раздел редактирования тем. В этом разделе для редактирования необходимо выбрать именно ту тему которую вы сейчас используете. Как правило многие администраторы сайтов устанавливают несколько шаблонов сайтов но используется всего один. Поэтому редактировать следует тот который используется.

Редактировать необходимо такие шаблоны: single.php, index.php и page.php (если есть специально созданная страница, например, category.php, то и этот тоже)

Выглядит это так:

Сначала выбираем необходимый шаблон. (На данном примере показаны шаблоны имеющиеся в моей теме, у вас их может быть больше или меньше. Редактировать необходимо все что имеются согласно списка: single.php, index.php и page.php, category.php Если какой то из перечисленных шаблонов в вашем списке не отображён, значит просто пропускаем.)

Установка плагина Breadcrumb NavXT описание

Затем берём код:

<div class="breadcrumb">

<?php

if(function_exists('bcn_display'))

{

bcn_display();

}

?>

</div>

И вставляем его в каждом из перечисленных шаблонов примерно в одно и тоже место, после заголовка (header):

Установка плагина Breadcrumb NavXT тест

Естественно сохраняем каждый изменённый файл. После чего плагин Breadcrumb NavXT начнёт работать.

Ну вот и всё, почти… Почти, потому что как правило этих настроек вполне достаточно.

Но бывают случаи когда дизайн вашей темы сайта не совпадает с дизайном отображаемой строки Хлебных крошек.

В этом случае придётся подгонять Хлебные крошки под дизайн сайта отдельно.

Делается это так. Берём этот код:

.breadcrumb {

font:bolder 12px "Trebuchet MS", Verdana, Arial;

padding-bottom: 10px;

}

.breadcrumb a{

color: #1B7499;

} .breadcrumb a:hover {

color: #EF0E0E;

}

Изменяем в нём параметры отображения размера текста, шрифта и цвета на необходимые. Затем копируем изменённый код, идём по вкладке «Таблица стилей» вашей темы

Установка плагина Breadcrumb NavXT вордпресс

… и вставляем код в самом низу редактора

Плагин

… сохраняемся, нажав «Обновить файл» Конечно, для получения удовлетворительного результата придётся немного поэкспериментировать.

Ну вот, теперь пожалуй всё.

minaev.biz

Значение и пример хлебных крошек

Для того чтоб вы имели представление о том, как выглядят хлебные крошки на сайте, приведу пример со своего блога:

пример хлебных крошек

Хлебные крошки выделены оранжевой рамочкой. Их также называют навигационной цепочкой.

Чаще всего такую цепочку можно найти под шапкой сайта, непосредственно перед заголовком статьи.

Так, посетитель может легко понять, в каком разделе находится статья, которую он просматривает. Общая структура навигации «Хлебные крошки» следующая: Главная страница -> Раздел -> Название статьи. Она может быть усложнена, если, к примеру, в разделе появится подраздел, тогда структура будет такой: Главная страница –> Раздел –> Подраздел –> Название статьи.

Кроме навигации по сайту, в SEO хлебные крошки также играют не последнюю роль. Они улучшают юзабилити сайта, перелинковку, также иногда они могут попасть в сниппет. Это позволит повысить кликабельность в выдаче, а также поможет поисковикам быстрее распознать структуру вашего ресурса. Для этого нужна микроразметка хлебных крошек. О том, как ее сделать, поговорим ниже.

Хлебные крошки: как сделать на своем блоге?

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

Для начала рассмотрим, как вывести хлебные крошки с php-кодом. Сразу скажу, что ниже будет приведен этот же код, но с элементами микроразметки, советую сразу взять его.

Вот образец кода, который нужно вставить в файл functions.php:

Русские названия в коде можно заменить на свои. Например, вместо «Главная» подставить название сайта.

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

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

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

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

Наиболее распространенные плагины для вывода хлебных крошек: Yoast WordPress Seo, BreadCrumb NavXT. Плагин WordPress SEO by Yoast является многофункциональным и хлебные крошки в его арсенале – лишь малая часть. Поэтому, если данный плагин у вас уже установлен, то вы можете использовать и эту его функцию.

BreadCrumb XT же является отдельным плагином исключительно для хлебных крошек. Читайте о том, как правильно установить плагин.

После установки в настройках вы сможете задать вариант пути (рубрики, даты, метки), максимальную длину заголовка, символы между разделами. Кроме того, можно отключить вывод названия страницы, на которой находится посетитель, чтобы не дублировать заголовок статьи. Для того чтобы хлебные крошки отображались на странице, вам опять-таки нужно прописать код в файле single.php или header.php.

Внести изменения в стили можно по аналогии с тем, как это было описано выше.

Микроразметка хлебных крошек

Мы уже говорили о том, насколько важна микроразметка сайта. Хлебные крошки в сниппете моего блога выглядят так:

Хлебные крошки в сниппете

Такой вид более понятен и приятен для пользователя, нежели просто url страницы.

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

Если поисковики не распознали хлебные крошки, тогда им нужно помочь. На своем блоге я использую код, приведенный в начале статьи. В него я добавила элементы микроразметки. Если вы тоже выводите хлебные крошки php-кодом, можете заменить свой код на этот:

Делать микроразметку для навигационной цепочки, созданной с помощью плагина, я не пробовала. Но, думаю, это не сложно. Можно по-аналогии с моим кодом видоизменить код плагина. Давайте разберем приведенный код.

Данный код позволяет поисковым системам определить, что это элемент «Хлебные крошки».
Каждый отдельный элемент цепочки обернут в div, содержащий код: itemscope itemtype="https://data-vocabulary.org/Breadcrumb".

itemprop="url" – определяет значение url, его нужно добавить в каждый тег a

itemprop="title – определяет значение заголовка элемента цепочки

Весь код оборачивается в div с параметром xmlns:v="https://rdf.data-vocabulary.org/#">, чтобы подключить словарь schema.org.

После добавления кода снова проверьте, распознали ли хлебные крошки Яндекс и Гугл.

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

Напоследок предлагаю посмотреть видео о внутренней перелинковке.

pro-wordpress.ru

Функция «хлебных крошек» для WordPress

<?php  /**  * Хлебные крошки для WordPress (breadcrumbs)  *  * @param string [$sep = ''] Разделитель. По умолчанию ' » '  * @param array [$l10n = array()] Для локализации. См. переменную $default_l10n.  * @param array [$args = array()] Опции. См. переменную $def_args  * @return string Выводит на экран HTML код  *  * version 3.3.2  */ function kama_breadcrumbs( $sep = ' » ', $l10n = array(), $args = array() ){ 	$kb = new Kama_Breadcrumbs; 	echo $kb->get_crumbs( $sep, $l10n, $args ); }  class Kama_Breadcrumbs {  	public $arg;  	// Локализация 	static $l10n = array( 		'home' => 'Главная', 		'paged' => 'Страница %d', 		'_404' => 'Ошибка 404', 		'search' => 'Результаты поиска по запросу - <b>%s</b>', 		'author' => 'Архив автора: <b>%s</b>', 		'year' => 'Архив за <b>%d</b> год', 		'month' => 'Архив за: <b>%s</b>', 		'day' => '', 		'attachment' => 'Медиа: %s', 		'tag' => 'Записи по метке: <b>%s</b>', 		'tax_tag' => '%1$s из "%2$s" по тегу: <b>%3$s</b>', 		// tax_tag выведет: 'тип_записи из "название_таксы" по тегу: имя_термина'. 		// Если нужны отдельные холдеры, например только имя термина, пишем так: 'записи по тегу: %3$s' 	);  	// Параметры по умолчанию 	static $args = array( 		'on_front_page' => true, // выводить крошки на главной странице 		'show_post_title' => true, // показывать ли название записи в конце (последний элемент). Для записей, страниц, вложений 		'show_term_title' => true, // показывать ли название элемента таксономии в конце (последний элемент). Для меток, рубрик и других такс 		'title_patt' => '<span class="kb_title">%s</span>', // шаблон для последнего заголовка. Если включено: show_post_title или show_term_title 		'last_sep' => true, // показывать последний разделитель, когда заголовок в конце не отображается 		'markup' => 'schema.org', // 'markup' - микроразметка. Может быть: 'rdf.data-vocabulary.org', 'schema.org', '' - без микроразметки 										 // или можно указать свой массив разметки: 										 // array( 'wrappatt'=>'<div class="kama_breadcrumbs">%s</div>', 'linkpatt'=>'<a href="%s">%s</a>', 'sep_after'=>'', ) 		'priority_tax' => array('category'), // приоритетные таксономии, нужно когда запись в нескольких таксах 		'priority_terms' => array(), // 'priority_terms' - приоритетные элементы таксономий, когда запись находится в нескольких элементах одной таксы одновременно. 									 // Например: array( 'category'=>array(45,'term_name'), 'tax_name'=>array(1,2,'name') ) 									 // 'category' - такса для которой указываются приор. элементы: 45 - ID термина и 'term_name' - ярлык. 									 // порядок 45 и 'term_name' имеет значение: чем раньше тем важнее. Все указанные термины важнее неуказанных... 		'nofollow' => false, // добавлять rel=nofollow к ссылкам?  		// служебные 		'sep' => '', 		'linkpatt' => '', 		'pg_end' => '', 	);  	function get_crumbs( $sep, $l10n, $args ){ 		global $post, $wp_query, $wp_post_types;  		self::$args['sep'] = $sep;  		// Фильтрует дефолты и сливает 		$loc = (object) array_merge( apply_filters('kama_breadcrumbs_default_loc', self::$l10n ), $l10n ); 		$arg = (object) array_merge( apply_filters('kama_breadcrumbs_default_args', self::$args ), $args );  		$arg->sep = '<span class="kb_sep">'. $arg->sep .'</span>'; // дополним  		// упростим 		$sep = & $arg->sep; 		$this->arg = & $arg;  		// микроразметка --- 		if(1){ 			$mark = & $arg->markup;  			// Разметка по умолчанию 			if( ! $mark ) $mark = array( 				'wrappatt' => '<div class="kama_breadcrumbs">%s</div>', 				'linkpatt' => '<a href="%s">%s</a>', 				'sep_after' => '', 			); 			// rdf 			elseif( $mark === 'rdf.data-vocabulary.org' ) $mark = array( 				'wrappatt' => '<div class="kama_breadcrumbs" prefix="v: http://rdf.data-vocabulary.org/#">%s</div>', 				'linkpatt' => '<span typeof="v:Breadcrumb"><a href="%s" rel="v:url" property="v:title">%s</a>', 				'sep_after' => '</span>', // закрываем span после разделителя! 			); 			// schema.org 			elseif( $mark === 'schema.org' ) $mark = array( 				'wrappatt' => '<div class="kama_breadcrumbs" itemscope itemtype="http://schema.org/BreadcrumbList">%s</div>', 				'linkpatt' => '<span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem"><a href="%s" itemprop="item"><span itemprop="name">%s</span></a></span>', 				'sep_after' => '', 			);  			elseif( ! is_array($mark) ) 				die( __CLASS__ .': "markup" parameter must be array...');  			$wrappatt = $mark['wrappatt']; 			$arg->linkpatt = $arg->nofollow ? str_replace('<a ','<a rel="nofollow"', $mark['linkpatt']) : $mark['linkpatt']; 			$arg->sep .= $mark['sep_after']."n"; 		}  		$linkpatt = $arg->linkpatt; // упростим  		$q_obj = get_queried_object();  		// может это архив пустой таксы? 		$ptype = null; 		if( empty($post) ){ 			if( isset($q_obj->taxonomy) ) 				$ptype = & $wp_post_types[ get_taxonomy($q_obj->taxonomy)->object_type[0] ]; 		} 		else $ptype = & $wp_post_types[ $post->post_type ];  		// paged 		$arg->pg_end = ''; 		if( ($paged_num = get_query_var('paged')) || ($paged_num = get_query_var('page')) ) 			$arg->pg_end = $sep . sprintf( $loc->paged, (int) $paged_num );  		$pg_end = $arg->pg_end; // упростим  		$out = '';  		if( is_front_page() ){ 			return $arg->on_front_page ? sprintf( $wrappatt, ( $paged_num ? sprintf($linkpatt, get_home_url(), $loc->home) . $pg_end : $loc->home ) ) : ''; 		} 		// страница записей, когда для главной установлена отдельная страница. 		elseif( is_home() ) { 			$out = $paged_num ? ( sprintf( $linkpatt, get_permalink($q_obj), esc_html($q_obj->post_title) ) . $pg_end ) : esc_html($q_obj->post_title); 		} 		elseif( is_404() ){ 			$out = $loc->_404; 		} 		elseif( is_search() ){ 			$out = sprintf( $loc->search, esc_html( $GLOBALS['s'] ) ); 		} 		elseif( is_author() ){ 			$tit = sprintf( $loc->author, esc_html($q_obj->display_name) ); 			$out = ( $paged_num ? sprintf( $linkpatt, get_author_posts_url( $q_obj->ID, $q_obj->user_nicename ) . $pg_end, $tit ) : $tit ); 		} 		elseif( is_year() || is_month() || is_day() ){ 			$y_url = get_year_link( $year = get_the_time('Y') );  			if( is_year() ){ 				$tit = sprintf( $loc->year, $year ); 				$out = ( $paged_num ? sprintf($linkpatt, $y_url, $tit) . $pg_end : $tit ); 			} 			// month day 			else { 				$y_link = sprintf( $linkpatt, $y_url, $year); 				$m_url = get_month_link( $year, get_the_time('m') );  				if( is_month() ){ 					$tit = sprintf( $loc->month, get_the_time('F') ); 					$out = $y_link . $sep . ( $paged_num ? sprintf( $linkpatt, $m_url, $tit ) . $pg_end : $tit ); 				} 				elseif( is_day() ){ 					$m_link = sprintf( $linkpatt, $m_url, get_the_time('F')); 					$out = $y_link . $sep . $m_link . $sep . get_the_time('l'); 				} 			} 		} 		// Древовидные записи 		elseif( is_singular() && $ptype->hierarchical ){ 			$out = $this->_add_title( $this->_page_crumbs($post), $post ); 		} 		// Таксы, плоские записи и вложения 		else { 			$term = $q_obj; // таксономии  			// определяем термин для записей (включая вложения attachments) 			if( is_singular() ){ 				// изменим $post, чтобы определить термин родителя вложения 				if( is_attachment() && $post->post_parent ){ 					$save_post = $post; // сохраним 					$post = get_post($post->post_parent); 				}  				// учитывает если вложения прикрепляются к таксам древовидным - все бывает 🙂 				$taxonomies = get_object_taxonomies( $post->post_type ); 				// оставим только древовидные и публичные, мало ли... 				$taxonomies = array_intersect( $taxonomies, get_taxonomies( array('hierarchical' => true, 'public' => true) ) );  				if( $taxonomies ){ 					// сортируем по приоритету 					if( ! empty($arg->priority_tax) ){ 						usort( $taxonomies, function($a,$b)use($arg){ 							$a_index = array_search($a, $arg->priority_tax); 							if( $a_index === false ) $a_index = 9999999;  							$b_index = array_search($b, $arg->priority_tax); 							if( $b_index === false ) $b_index = 9999999;  							return ( $b_index === $a_index ) ? 0 : ( $b_index < $a_index ? 1 : -1 ); // меньше индекс - выше 						} ); 					}  					// пробуем получить термины, в порядке приоритета такс 					foreach( $taxonomies as $taxname ){ 						if( $terms = get_the_terms( $post->ID, $taxname ) ){ 							// проверим приоритетные термины для таксы 							$prior_terms = & $arg->priority_terms[ $taxname ]; 							if( $prior_terms && count($terms) > 2 ){ 								foreach( (array) $prior_terms as $term_id ){ 									$filter_field = is_numeric($term_id) ? 'term_id' : 'slug'; 									$_terms = wp_list_filter( $terms, array($filter_field=>$term_id) );  									if( $_terms ){ 										$term = array_shift( $_terms ); 										break; 									} 								} 							} 							else 								$term = array_shift( $terms );  							break; 						} 					} 				}  				if( isset($save_post) ) $post = $save_post; // вернем обратно (для вложений) 			}  			// вывод  			// все виды записей с терминами или термины 			if( $term && isset($term->term_id) ){ 				$term = apply_filters('kama_breadcrumbs_term', $term );  				// attachment 				if( is_attachment() ){ 					if( ! $post->post_parent ) 						$out = sprintf( $loc->attachment, esc_html($post->post_title) ); 					else { 						if( ! $out = apply_filters('attachment_tax_crumbs', '', $term, $this ) ){ 							$_crumbs = $this->_tax_crumbs( $term, 'self' ); 							$parent_tit = sprintf( $linkpatt, get_permalink($post->post_parent), get_the_title($post->post_parent) ); 							$_out = implode( $sep, array($_crumbs, $parent_tit) ); 							$out = $this->_add_title( $_out, $post ); 						} 					} 				} 				// single 				elseif( is_single() ){ 					if( ! $out = apply_filters('post_tax_crumbs', '', $term, $this ) ){ 						$_crumbs = $this->_tax_crumbs( $term, 'self' ); 						$out = $this->_add_title( $_crumbs, $post ); 					} 				} 				// не древовидная такса (метки) 				elseif( ! is_taxonomy_hierarchical($term->taxonomy) ){ 					// метка 					if( is_tag() ) 						$out = $this->_add_title('', $term, sprintf( $loc->tag, esc_html($term->name) ) ); 					// такса 					elseif( is_tax() ){ 						$post_label = $ptype->labels->name; 						$tax_label = $GLOBALS['wp_taxonomies'][ $term->taxonomy ]->labels->name; 						$out = $this->_add_title('', $term, sprintf( $loc->tax_tag, $post_label, $tax_label, esc_html($term->name) ) ); 					} 				} 				// древовидная такса (рибрики) 				else { 					if( ! $out = apply_filters('term_tax_crumbs', '', $term, $this ) ){ 						$_crumbs = $this->_tax_crumbs( $term, 'parent' ); 						$out = $this->_add_title( $_crumbs, $term, esc_html($term->name) );  					} 				} 			} 			// влоежния от записи без терминов 			elseif( is_attachment() ){ 				$parent = get_post($post->post_parent); 				$parent_link = sprintf( $linkpatt, get_permalink($parent), esc_html($parent->post_title) ); 				$_out = $parent_link;  				// вложение от записи древовидного типа записи 				if( is_post_type_hierarchical($parent->post_type) ){ 					$parent_crumbs = $this->_page_crumbs($parent); 					$_out = implode( $sep, array( $parent_crumbs, $parent_link ) ); 				}  				$out = $this->_add_title( $_out, $post ); 			} 			// записи без терминов 			elseif( is_singular() ){ 				$out = $this->_add_title( '', $post ); 			} 		}  		// замена ссылки на архивную страницу для типа записи 		$home_after = apply_filters('kama_breadcrumbs_home_after', '', $linkpatt, $sep, $ptype );  		if( '' === $home_after ){ 			// Ссылка на архивную страницу типа записи для: отдельных страниц этого типа; архивов этого типа; таксономий связанных с этим типом. 			if( $ptype && $ptype->has_archive && ! in_array( $ptype->name, array('post','page','attachment') ) 				&& ( is_post_type_archive() || is_singular() || (is_tax() && in_array($term->taxonomy, $ptype->taxonomies)) ) 			){ 				$pt_title = $ptype->labels->name;  				// первая страница архива типа записи 				if( is_post_type_archive() && ! $paged_num ) 					$home_after = sprintf( $this->arg->title_patt, $pt_title ); 				// singular, paged post_type_archive, tax 				else{ 					$home_after = sprintf( $linkpatt, get_post_type_archive_link($ptype->name), $pt_title );  					$home_after .= ( ($paged_num && ! is_tax()) ? $pg_end : $sep ); // пагинация 				} 			} 		}  		$before_out = sprintf( $linkpatt, home_url(), $loc->home ) . ( $home_after ? $sep.$home_after : ($out ? $sep : '') );  		$out = apply_filters('kama_breadcrumbs_pre_out', $out, $sep, $loc, $arg );  		$out = sprintf( $wrappatt, $before_out . $out );  		return apply_filters('kama_breadcrumbs', $out, $sep, $loc, $arg ); 	}  	function _page_crumbs( $post ){ 		$parent = $post->post_parent;  		$crumbs = array(); 		while( $parent ){ 			$page = get_post( $parent ); 			$crumbs[] = sprintf( $this->arg->linkpatt, get_permalink($page), esc_html($page->post_title) ); 			$parent = $page->post_parent; 		}  		return implode( $this->arg->sep, array_reverse($crumbs) ); 	}  	function _tax_crumbs( $term, $start_from = 'self' ){ 		$termlinks = array(); 		$term_id = ($start_from === 'parent') ? $term->parent : $term->term_id; 		while( $term_id ){ 			$term = get_term( $term_id, $term->taxonomy ); 			$termlinks[] = sprintf( $this->arg->linkpatt, get_term_link($term), esc_html($term->name) ); 			$term_id = $term->parent; 		}  		if( $termlinks ) 			return implode( $this->arg->sep, array_reverse($termlinks) ) /*. $this->arg->sep*/; 		return ''; 	}  	// добалвяет заголовок к переданному тексту, с учетом всех опций. Добавляет разделитель в начало, если надо. 	function _add_title( $add_to, $obj, $term_title = '' ){ 		$arg = & $this->arg; // упростим... 		$title = $term_title ? $term_title : esc_html($obj->post_title); // $term_title чиститься отдельно, теги моугт быть... 		$show_title = $term_title ? $arg->show_term_title : $arg->show_post_title;  		// пагинация 		if( $arg->pg_end ){ 			$link = $term_title ? get_term_link($obj) : get_permalink($obj); 			$add_to .= ($add_to ? $arg->sep : '') . sprintf( $arg->linkpatt, $link, $title ) . $arg->pg_end; 		} 		// дополняем - ставим sep 		elseif( $add_to ){ 			if( $show_title ) 				$add_to .= $arg->sep . sprintf( $arg->title_patt, $title ); 			elseif( $arg->last_sep ) 				$add_to .= $arg->sep; 		} 		// sep будет потом... 		elseif( $show_title ) 			$add_to = sprintf( $arg->title_patt, $title );  		return $add_to; 	}  }  /**  * Изменения:  * 3.3 - новые хуки: attachment_tax_crumbs, post_tax_crumbs, term_tax_crumbs. Позволяют дополнить крошки таксономий.  * 3.2 - баг с разделителем, с отключенным 'show_term_title'. Стабилизировал логику.  * 3.1 - баг с esc_html() для заголовка терминов - с тегами получалось криво...  * 3.0 - Обернул в класс. Добавил опции: 'title_patt', 'last_sep'. Доработал код. Добавил пагинацию для постов.  * 2.5 - ADD: Опция 'show_term_title'  * 2.4 - Мелкие правки кода  * 2.3 - ADD: Страница записей, когда для главной установлена отделенная страница.  * 2.2 - ADD: Link to post type archive on taxonomies page  * 2.1 - ADD: $sep, $loc, $args params to hooks  * 2.0 - ADD: в фильтр 'kama_breadcrumbs_home_after' добавлен четвертый аргумент $ptype  * 1.9 - ADD: фильтр 'kama_breadcrumbs_default_loc' для изменения локализации по умолчанию  * 1.8 - FIX: заметки, когда в рубрике нет записей  * 1.7 - Улучшена работа с приоритетными таксономиями.  */ 

Вставлять этот код нужно в файл шаблона functions.php или непосредственно в тот файл где вызывается функция.

Еще по теме:   JSON rest API

Вызывать функцию нужно в шаблоне, в том месте, где должны выводится крошки, так:

<?php if( function_exists('kama_breadcrumbs') ) kama_breadcrumbs(); ?>

Если нужно поменять разделитель между ссылками, укажите первый параметр:

<?php if( function_exists('kama_breadcrumbs') ) kama_breadcrumbs(' » '); ?>

меню

Примеры использование фильтров

#1 Установка параметров через фильтр

Измени дефолтные параметры через фильтр

add_filter('kama_breadcrumbs_default_args', function($args){ 	$args['on_front_page'] = 0; 	$args['show_post_title'] = ''; 	$args['priority_tax'] = array('mytax'); 	return $args; } );

Если установить параметры при вызове функции в третьем аргументе функции, то они перебьют параметры указанные в фильтре…

#3 Пример перевода крошек на английский

Эти примеры показывают как перевести крошки на нужный язык или просто изменить дефолтные значения:

Вариант 1

При вызове функции нужно указать строки локализации так:

// Локализация if( function_exists('kama_breadcrumbs') ){  	$myl10n = array( 		'home' => 'Front page', 		'paged' => 'Page %d', 		'_404' => 'Error 404', 		'search' => 'Search results by query - <b>%s</b>', 		'author' => 'Author archve: <b>%s</b>', 		'year' => 'Archive by <b>%d</b> год', 		'month' => 'Archive by: <b>%s</b>', 		'day' => '', 		'attachment' => 'Media: %s', 		'tag' => 'Posts by tag: <b>%s</b>', 		'tax_tag' => '%1$s from "%2$s" by tag: <b>%3$s</b>', 		// tax_tag выведет: 'тип_записи из "название_таксы" по тегу: имя_термина'.  		// Если нужны отдельные холдеры, например только имя термина, пишем так: 'записи по тегу: %3$s' 	);  	kama_breadcrumbs(' » ', $myl10n );  }
Вариант 2

C версии 1.9. Можно использовать хук kama_breadcrumbs_default_loc, чтобы для каждого вызова одно и тоже не указывать. Для этого рядом с исходным кодом крошек добавьте такой хук:

add_filter('kama_breadcrumbs_default_loc', function($l10n){ 	// Локализация 	return array( 		'home' => 'Front page', 		'paged' => 'Page %d', 		'_404' => 'Error 404', 		'search' => 'Search results by query - <b>%s</b>', 		'author' => 'Author archve: <b>%s</b>', 		'year' => 'Archive by <b>%d</b> год', 		'month' => 'Archive by: <b>%s</b>', 		'day' => '', 		'attachment' => 'Media: %s', 		'tag' => 'Posts by tag: <b>%s</b>', 		'tax_tag' => '%1$s from "%2$s" by tag: <b>%3$s</b>', 		// tax_tag выведет: 'тип_записи из "название_таксы" по тегу: имя_термина'.  		// Если нужны отдельные холдеры, например только имя термина, пишем так: 'записи по тегу: %3$s' 	); });

Далее, используйте вызов в шаблоне как обычно, крошки будут переведены на англ.:

function_exists('kama_breadcrumbs') && kama_breadcrumbs();

#3 Добавление произвольной ссылки в начало крошек

Допустим нам нужно добавить после пункта «Главная» ссылку на страницу 7, если в текущий момент мы находимся в категории 5 или в её дочерней категории (учитывается один уровень вложенности).

Еще по теме:   Админ панель Joomla

Для этого добавьте такой хук рядом с кодом крошек:

add_action('kama_breadcrumbs_home_after', 'my_breadcrumbs_home_after', 10, 4); function my_breadcrumbs_home_after( $false, $linkpatt, $sep, $ptype ){ 	// если мы в рубрике с ID 5 или в дочерней рубрике, 	// то дополним начало крошек ссылкой на страницу с ID 7 	$qo = get_queried_object(); 	if( is_category() && ( $qo->term_id == 5 || $qo->parent == 5 ) ){ 		$page = get_post( 7 ); 		return sprintf( $linkpatt, get_permalink($page), $page->post_title ) . $sep; 	}  	return $false; }

#4 Добавление еще таксономий в крошки

По умолчанию в крошках обрабатывается только одна таксономи. Но иногда нужно несколько, для этого в версии 3.3 я вставил хуки: 'attachment_tax_crumbs', 'post_tax_crumbs', 'term_tax_crumbs'.

Допустим, у нас есть тип записи realty и 3 таксы для него: country, type_deal, type_realty. Нужно, чтобы у страницы записи в крошках отображались все таксы в указанном порядке. Также нужно, чтобы на каждой странице таксы указывались все предыдущие таксы и текущая в указанном порядке: country > type_deal > type_realty

// apply_filters('term_tax_crumbs', '', $term, $that ); add_filter('term_tax_crumbs', 'more_tax_crumbs', 10, 3); add_filter('post_tax_crumbs', 'more_tax_crumbs', 10, 3); function more_tax_crumbs( $empty, $term, $that ){ 	$is_post_filter = doing_filter('post_tax_crumbs'); // else 'term_tax_crumbs'  	if( ( $is_post_filter && is_singular('realty') ) || is_tax('country') ){ 		global $post;  		$out = '';  		$out = $that->_tax_crumbs( $term, 'self' ) . $that->arg->sep; // базовая такса - country  		// тип сделки 		$term = get_query_var('type_deal'); 		if( $term && ($term = get_term_by('slug', $term, 'type_deal')) ) 			$out .= $that->_tax_crumbs( $term, 'self' ) . $that->arg->sep; // тип сделки  		// тип недвижимости 		$term = get_query_var('type_realty'); 		if( $term && ($term = get_term_by('slug', $term, 'type_realty')) ){ 			// запись 			if( $is_post_filter ){ 				$_crumbs = $that->_tax_crumbs( $term, 'self' ); 				$out .= $that->_add_title( $_crumbs, $post );  			} 			// такса 			else { 				$_crumbs = $that->_tax_crumbs( $term, 'parent' ); 				$out .= $that->_add_title( $_crumbs, $term, esc_html($term->name) );  			}  		}  		return $out; 	}  	return $empty; } 

меню

wp-kama.ru

Что такое «хлебные крошки»

Итак, «хлебные крошки» — это дополнительная постраничная навигация, которая отображает в какой рубрике или в каком разделе находится статья. Посетитель, перейдя на какую-то страницу вашего блога должен понимать, в каком разделе он находится и в той ли рубрике он ищет нужную ему информацию. Обобщенно эта навигация может быть представлена так:

замена-картинки

У нас на сайте она выглядит следующим образом:

хлебные-крошки-наш-сайт

Кроме того, наличие данной навигации помогает роботам более четко понимать структуру сайта и быстрее индексировать ваш блог. А это очень важно при продвижении проекта в сети.

«Почему?» — вы спросите, мы решили пользоваться данным плагином. Ответ тут будет прост. В интернете существует большое количество похожих сервисов, которые помогут с выводом «крошек», но при этом они дополнительно будут нагружать сайт, от этого лучше уж точно не станет. А раз мы все равно используем Yoast SEO для оптимизации постов, то грех не воспользоваться его возможностями и не сделать удобное юзабилити с его помощью.

blog-bridge.ru

Всем привет! Сегодня на SEO-Mayak.com я буду рассказывать: как сделать хлебные крошки на WordPress без плагина.

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

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

hlebnye kroshky

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

У меня статьи находятся на страницах 3 уровня вложения и хлебные крошки выглядят так:

На своем кулинарном блоге я не использую родительские рубрики и у страниц получается 2 степень вложенности:

Какую Вы структуру вложенности страниц изначально для cайта выбрали, такие и крошки будут.

Устанавливаем хлебные крошки на WordPress без плагина

WordPress очень простой движок и для того, чтобы внедрить код хлебных крошек, для редактирования открываем файл single.php, который находиться в папке с Вашей темой и ищем что-то похожее на такою строчку:

<?php if (have_posts()) : while (have_posts()) : the_post(); ?>

И перед данной строчкой вставляем код:

  <div id="breadcrumbs">   <?php if (is_home()) { ?>     <?php } elseif (is_single()) { ?>   <a href="<?php echo get_option('home'); ?>">Главная</a> »   <?php foreach((get_the_category()) as $cat) {   $cat=$cat->cat_ID;   echo(get_category_parents($cat, TRUE, ' » ')); } the_title(); ?>     <?php } ?>   </div>  

При редактировании файлов советую пользоваться текстовым редактором Notepad++.Сохраняем изменения и в принципе код уже должен работать. Чтобы это проверить, достаточно открыть любую статью и в верхней ее части должны появиться хлебные крошки.

Остается немножко подправить внешний вид ссылок. Открываем для редактирования файл style.css и для идентификатора:

id="breadcrumbs"

Подбираем соответствующие Вашему шаблоны стили. В качестве примера я приведу стили хлебных крошек прописанные на моем блоге с подробными разъяснениями:

  /* Стили для хлебных крошек */    #breadcrumbs {   width: auto;    /* Общая ширина страницы */   font-size: 14px;   /* Размер шрифта */   color: #215B9B;   /* Цвет текста, который не является ссылкой */   text-shadow: #5DB6FA 0px 1px 1px;  /* Тени для текста (необязательно) */   text-align: left;   /* Прижимаем текст к левому краю страницы */   margin: 3px 30px 0px 30px; /* Внешние отступы */   padding-bottom: 5px; /* Внутренние отступы */   border-bottom: 2px solid #f2f2f2; /* Добавляем разделительную черту снизу */  }    /* цвет ссылок */    #breadcrumbs a, #breadcrumbs a:visited {   color: #215B9B; /* Цвет ссылки */   text-decoration: none; /* Отменяем подчеркивание ссылок */  }    /* цвет ссылок при наведении курсора */    #breadcrumbs a:hover, #breadcrumbs a:active {   color: #C6C600; /* цвет ссылки при наведении курсора */   text-decoration: none; /* Отменяем подчеркивание ссылок при наведении курсора */  }  

Цвета и отступы Вы конечно подбирайте под стиль своего шаблона. Для определения цвета советую пользоваться программой ColorCop, которую можно скачать по этой ссылке.

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

seo-mayak.com

Для чего нужны хлебные крошки на сайте

Перед тем как перейти непосредственно к обзору модулей, пару слов скажу о том, как и зачем применятся данное решение:

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

Однако такая функциональность эффективна в каждом веб-проекте. Если у вас имеется простая визитка на 10-20 страниц без вложенной иерархии, то нет смысла добавлять хлебные крошки в WP. Элемент не будет нести абсолютно никакой пользы, а лишь занимать свободное место на экране. В случае корпоративных порталов с многоуровневыми категориями / разделами — совсем другое дело. Плюс в интернет-магазинах он тоже отлично смотрится.

Теоретически допускается вывод данного блока не на всех страницах. Например, у вас есть блог, где изначально предусмотрено несколько традиционных путей по сайту: теги и категории, архивы дат, авторов, а также конкретные посты. В разделах и заметках навигацию я бы оставил, тогда как в метках и датах ценность подобной информации минимальна, т.к. она просто дублирует заголовок. Если установленные плагины хлебных крошек для Вордпресс не позволяют сделать это напрямую, используйте условные операторы. Кроме того, желательно максимально и ненавязчиво оформить элемент через макет и стили.

Плагин хлебные крошки

Глупо получится, когда сразу же под цепочкой «Главная» — «Категория» — «Заголовок поста» вы видите тот же тайтл + указание текущей категории. Подобное отображение рубрик, кстати, часто встречается в стандартных WP шаблонах, поэтому после интеграции соответствующего решения желательно этот нюанс подправить.

Плагины и хлебные крошки в WordPress

Модули под данную задачу легко находятся по англоязычному названию функции Breadcrumbs — в WordPress репозитории или через поисковики. Разных вариантов реализации хватает, но бОльшая их часть не обновлялись несколько лет.

Плагин хлебные крошки

Возможно, авторам надоело конкурировать с бессменными лидерами Breadcrumb NavXT с 600тыс. загрузок и SEO by Yoast. К тому же достаточно сложно придумать что-то сверх оригинальное в данном вопросе, т.к. он максимально прост и даже можно реализовать хлебные крошки в WordPress без плагина. Как бы там ни было, подобрал 4 наиболее интересных решения:

Yoast SEO

Плагин хлебные крошки

Основная задача модуля, в принципе, никак не связана с нашей сегодняшней темой, но не упомянуть его нельзя. Одна из дополнительных фишек плагина Yoast SEO — хлебные крошки. То есть вам не придется устанавливать новый модуль, а просто активируете соответствующую опцию. В работе я использую именно этот вариант.

Breadcrumb NavXT

Плагин хлебные крошки

Breadcrumb NavXT — самый популярный плагин по хлебным крошкам в WordPress с более чем 600 тысячами скачиваний. Обновляется регулярно и содержит множество функций для легкой настройки отображения навигации. Также в нем найдете встроенный виджет, поддержка bbPress, BuddyPress, локализации, возможность использования разработчиками фильтров/хуков и многое другое.

Breadcrumb

Плагин хлебные крошки

В принципе, сложно найти решения, которые были бы интереснее предыдущих двух, хотя есть неплохие попытки. Так, например, в модуле Breadcrumb для WordPress внедрена поддержка шорткодов, плюс сама цепочка ссылок имеет оригинальное оформление (смотрите по ссылке Live Demo!»). Непонятно только поддерживаются ли дизайны в бесплатной версии. Также вы можете настраивать тип разделителя и добавлять текст в начале элемента. По словам разработчиков скрипт максимально простой и легкий.

Prime Strategy Bread Crumb

Плагин хлебные крошки

Еще один вариант, имеющий плюс-минус достойное число загрузок, не смотря на то, что обновлялся около года назад. Авторы Prime Strategy Bread Crumb обещают гибкую настройку хлебных крошек в WordPress: встроенные хуки, параметры отображения и поддержку стилей (в описании есть пример CSS Sample). Модуль показался достаточно неплохим и простым решением с хорошими оценками.

Хлебные крошки в Yoast SEO

Я не буду детально описывать все тонкости работы, почитать об этом можете в обзоре SEO by Yoast, сосредоточусь исключительно на создании элемента с крошками. Процесс интеграции состоит из двух частей — установки в админке + правка шаблона.

После активации появится целый новый раздел SEO, где вам нужно выбрать пункт «Дополнительно». Далее переместите выключатель в пункте со странным названием «Включить Мякиш» в позицию «Включено»:

Плагин хлебные крошки

Разных опций здесь, в принципе не так уж и много. Вы определяете символ разделителя, название главной, префикс, текс для архивов и 404 страницы. Чуть ниже выбираете вариант таксономии, отображаемой в записи (рубрика — наиболее логична).

Затем переходите в файл шаблона, где собираетесь выводить навигационный блок и добавляете строки:

Самые популярные места вставки кода — в постах (single.php) и страницах (page.php) перед отображением заголовка. Иногда его могут размещать в конце макета шапки (header.php). Код выше имеет условный оператор и проверяет наличие плагина, а затем уже показывает результат. С такой конструкцией можно будет легко отключить хлебные крошки в настройках. Во многие профессиональные темы, кстати, данный код добавлен изначально, т.к. модуль является весьма популярным.

Еще одно преимущество Yoast SEO — хлебные крошки могут задаваться в дополнительных параметрах постов блога:

Еще по теме:   Кей Коллектор

Плагин хлебные крошки

То есть у вас есть шанс вручную определить любое значение заголовка WP записей через админку. Это полезно для длинных названий статей + позволяет избавиться от дублирующей информации.

Плагин Breadcrumb NavXT для WordPress

Также при создании хлебных крошек под Вордпресс используется планин Breadcrumb NavXT. Модуль обладает хорошей функциональностью, о которой я частично упоминал выше, плюс содержит много интересных опций. Разобраться в нем сможет практически каждый пользователь и легко поменять нужные настройки элемента навигации.

Устанавливаете плагин через админку либо скачиваете с официального репозитория. Важно! Для версии Breadcrumb NavXT от 5.2 вам потребуется PHP5.3, более ранние релизы требуют PHP5.2. Затем активируете, и в WP появится соответствующий раздел.

Плагин хлебные крошки

Здесь есть 4 закладки параметров:

  • В «Основных» можно выбрать тип разделителя, убрать линк на главную и настроить показ текущей страницы. Формат строки задается через шаблоны.
  • «Записи» — содержит опции для постов.
  • «Таксономии» — отвечают за метки / категории.
  • «Другое» — форматы страниц автора, архивов, 404 ошибки.

Советую пройтись по каждой вкладке, посмотреть все фишки. Формат отображения позволяет вносить любые изменения в данную навигацию — добавлять свой текст/символы, менять стили и т.п.

После указания параметров хлебных крошек Breadcrumbs в WordPress плагине нужно задать вывод информации в шаблоне — открываете соответствующий файл макета (как правило, header.php) и размещаете в нужном месте строки:

Аналогично работе с Yoast SEO выбор места размещения кода зависит от установленной темы. Если предполагается вывод блока в шапке, тогда используете header.php. Учитывая то, что этот файл общий для всех страниц макета, увидите цепочку ссылок на каждой из них. Также можно показывать элемент только в избранных разделах — в таком случае вставляете код в single.php, page.php, archive.php и т.п. В целом, Breadcrumb NavXT — неплохой инструмент.

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

Допускается реализация функции Breadcrumbs в WordPress без плагинов. Однако перед тем как перейти к описанию разных вариантов, я выскажу свое субъективное мнение почему это не лучшая идея:

  • Интеграция наверняка вызовет сложности у начинающих пользователей.
  • Редактирование параметров непосредственно в коде не особо наглядно — задание шаблонов отображения через админку куда удобнее нежели правка напрямую.
  • Модули имеют больше возможностей — взять хотя бы локализацию, поддержку Schema.org, виджеты.
  • Не все коды, найденные в сети, актуальны, корректны и регулярно обновляются, в то время когда, как минимум, Yoast SEO и Breadcrumb NavXT в WordPress стабильно работают.

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

Одно из самых компактных и плюс-минус актуальных решений найдено тут. Первым делом вы добавляете новую пользовательскую функцию get_breadcrumb() в файл functions.php:

Затем в макете отображения постов single.php или любом другом вызываете ее:

Также автор предлагает парочку стилей оформления:

В итоге получите что-то вроде:

Плагин хлебные крошки

Если вам этого достаточно, то почему нет. Также могу посоветовать вариант от Dimox’а который постарался учесть все недостатки существующих сниппетов. Исходного кода там в разы больше, из него вполне можно создавать полноценный модуль:)

Как убрать хлебные крошки в WordPress

В принципе, эта задача обратная к процессу установки элемента. Поэтому перед тем как его отключить нужно понять как именно все реализовано в вашем конкретном случае. Алгоритм приблизительно следующий:

  1. Смотрим есть ли плагин хлебных крошек для Вордпресс сайта. Если да, то пробуем скрыть отображение цепочки ссылок в настройках и/или деактивируем его.
  2. Если разработчик грамотно выполнил интеграцию, то удаление модуля не приведет к ошибкам. В противном случае ищем в файлах шаблона код вывода навигации (WinGrep в помощь). Это могут быть, например, функции yoast_breadcrumb(), bcn_display(), bread_crumb() и т.п. Избавляемся от лишних строк.
  3. Еще раз проверяем отображение страниц проекта в браузере.

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

Итого. В статье детально разобрал как сделать хлебные крошки в WordPress, информации по настройке вам должно хватить с головой. Советую перед установкой подумать действительно ли вам необходим данный блок. Что касается реализации, то лично я не вижу смысла внедрять элемент пути по сайту в Вордпресс без плагина, учитывая, что в вашем веб-проекте наверняка будет присутствовать Yoast SEO. Что касается других модулей, то они пригодятся лишь в случае какой-то оригинальной функциональности. Breadcrumb NavXT кажется весьма неплохим, но я обеими руками за решение от Yoast.

Если у вас есть какие-то вопросы по работе с хлебными крошками Breadcrumbs и WordPress плагинами для них, пишите ниже, — будем разбирать.

P.S. Постовой. В наше время нужно использовать современные трубопроводные системы — газовые трубы представлены ТД «Евротрубпласт» отвечают всем стандартам качества.

wordpressinside.ru

  /*   * "Хлебные крошки" для WordPress   * автор: Dimox   * версия: 2018.10.05   * лицензия: MIT  */  function dimox_breadcrumbs() {    	/* === ОПЦИИ === */  	$text['home'] = 'Главная'; // текст ссылки "Главная"  	$text['category'] = '%s'; // текст для страницы рубрики  	$text['search'] = 'Результаты поиска по запросу "%s"'; // текст для страницы с результатами поиска  	$text['tag'] = 'Записи с тегом "%s"'; // текст для страницы тега  	$text['author'] = 'Статьи автора %s'; // текст для страницы автора  	$text['404'] = 'Ошибка 404'; // текст для страницы 404  	$text['page'] = 'Страница %s'; // текст 'Страница N'  	$text['cpage'] = 'Страница комментариев %s'; // текст 'Страница комментариев N'    	$wrap_before = '<div class="breadcrumbs" itemscope itemtype="http://schema.org/BreadcrumbList">'; // открывающий тег обертки  	$wrap_after = '</div><!-- .breadcrumbs -->'; // закрывающий тег обертки  	$sep = '<span class="breadcrumbs__separator"> › </span>'; // разделитель между "крошками"  	$before = '<span class="breadcrumbs__current">'; // тег перед текущей "крошкой"  	$after = '</span>'; // тег после текущей "крошки"    	$show_on_home = 0; // 1 - показывать "хлебные крошки" на главной странице, 0 - не показывать  	$show_home_link = 1; // 1 - показывать ссылку "Главная", 0 - не показывать  	$show_current = 1; // 1 - показывать название текущей страницы, 0 - не показывать  	$show_last_sep = 1; // 1 - показывать последний разделитель, когда название текущей страницы не отображается, 0 - не показывать  	/* === КОНЕЦ ОПЦИЙ === */    	global $post;  	$home_url = home_url('/');  	$link = '<span itemprop="itemListElement" itemscope itemtype="http://schema.org/ListItem">';  	$link .= '<a class="breadcrumbs__link" href="%1$s" itemprop="item"><span itemprop="name">%2$s</span></a>';  	$link .= '<meta itemprop="position" content="%3$s" />';  	$link .= '</span>';  	$parent_id = ( $post ) ? $post->post_parent : '';  	$home_link = sprintf( $link, $home_url, $text['home'], 1 );    	if ( is_home() || is_front_page() ) {    		if ( $show_on_home ) echo $wrap_before . $home_link . $wrap_after;    	} else {    		$position = 0;    		echo $wrap_before;    		if ( $show_home_link ) {  			$position += 1;  			echo $home_link;  		}    		if ( is_category() ) {  			$parents = get_ancestors( get_query_var('cat'), 'category' );  			foreach ( array_reverse( $parents ) as $cat ) {  				$position += 1;  				if ( $position > 1 ) echo $sep;  				echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );  			}  			if ( get_query_var( 'paged' ) ) {  				$position += 1;  				$cat = get_query_var('cat');  				echo $sep . sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );  				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;  			} else {  				if ( $show_current ) {  					if ( $position >= 1 ) echo $sep;  					echo $before . sprintf( $text['category'], single_cat_title( '', false ) ) . $after;  				} elseif ( $show_last_sep ) echo $sep;  			}    		} elseif ( is_search() ) {  			if ( $show_home_link && $show_current || ! $show_current && $show_last_sep ) echo $sep;  			if ( $show_current ) echo $before . sprintf( $text['search'], get_search_query() ) . $after;    		} elseif ( is_year() ) {  			if ( $show_home_link && $show_current ) echo $sep;  			if ( $show_current ) echo $before . get_the_time('Y') . $after;  			elseif ( $show_home_link && $show_last_sep ) echo $sep;    		} elseif ( is_month() ) {  			if ( $show_home_link ) echo $sep;  			$position += 1;  			echo sprintf( $link, get_year_link( get_the_time('Y') ), get_the_time('Y'), $position );  			if ( $show_current ) echo $sep . $before . get_the_time('F') . $after;  			elseif ( $show_last_sep ) echo $sep;    		} elseif ( is_day() ) {  			if ( $show_home_link ) echo $sep;  			$position += 1;  			echo sprintf( $link, get_year_link( get_the_time('Y') ), get_the_time('Y'), $position ) . $sep;  			$position += 1;  			echo sprintf( $link, get_month_link( get_the_time('Y'), get_the_time('m') ), get_the_time('F'), $position );  			if ( $show_current ) echo $sep . $before . get_the_time('d') . $after;  			elseif ( $show_last_sep ) echo $sep;    		} elseif ( is_single() && ! is_attachment() ) {  			if ( get_post_type() != 'post' ) {  				$position += 1;  				$post_type = get_post_type_object( get_post_type() );  				if ( $position > 1 ) echo $sep;  				echo sprintf( $link, get_post_type_archive_link( $post_type->name ), $post_type->labels->name, $position );  				if ( $show_current ) echo $sep . $before . get_the_title() . $after;  				elseif ( $show_last_sep ) echo $sep;  			} else {  				$cat = get_the_category(); $catID = $cat[0]->cat_ID;  				$parents = get_ancestors( $catID, 'category' );  				$parents = array_reverse( $parents );  				$parents[] = $catID;  				foreach ( $parents as $cat ) {  					$position += 1;  					if ( $position > 1 ) echo $sep;  					echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );  				}  				if ( get_query_var( 'cpage' ) ) {  					$position += 1;  					echo $sep . sprintf( $link, get_permalink(), get_the_title(), $position );  					echo $sep . $before . sprintf( $text['cpage'], get_query_var( 'cpage' ) ) . $after;  				} else {  					if ( $show_current ) echo $sep . $before . get_the_title() . $after;  					elseif ( $show_last_sep ) echo $sep;  				}  			}    		} elseif ( is_post_type_archive() ) {  			$post_type = get_post_type_object( get_post_type() );  			if ( get_query_var( 'paged' ) ) {  				$position += 1;  				if ( $position > 1 ) echo $sep;  				echo sprintf( $link, get_post_type_archive_link( $post_type->name ), $post_type->label, $position );  				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;  			} else {  				if ( $show_home_link && $show_current ) echo $sep;  				if ( $show_current ) echo $before . $post_type->label . $after;  				elseif ( $show_home_link && $show_last_sep ) echo $sep;  			}    		} elseif ( is_attachment() ) {  			$parent = get_post( $parent_id );  			$cat = get_the_category( $parent->ID ); $catID = $cat[0]->cat_ID;  			$parents = get_ancestors( $catID, 'category' );  			$parents = array_reverse( $parents );  			$parents[] = $catID;  			foreach ( $parents as $cat ) {  				$position += 1;  				if ( $position > 1 ) echo $sep;  				echo sprintf( $link, get_category_link( $cat ), get_cat_name( $cat ), $position );  			}  			$position += 1;  			echo $sep . sprintf( $link, get_permalink( $parent ), $parent->post_title, $position );  			if ( $show_current ) echo $sep . $before . get_the_title() . $after;  			elseif ( $show_last_sep ) echo $sep;    		} elseif ( is_page() && ! $parent_id ) {  			if ( $show_home_link && $show_current ) echo $sep;  			if ( $show_current ) echo $before . get_the_title() . $after;  			elseif ( $show_home_link && $show_last_sep ) echo $sep;    		} elseif ( is_page() && $parent_id ) {  			$parents = get_post_ancestors( get_the_ID() );  			foreach ( array_reverse( $parents ) as $pageID ) {  				$position += 1;  				if ( $position > 1 ) echo $sep;  				echo sprintf( $link, get_page_link( $pageID ), get_the_title( $pageID ), $position );  			}  			if ( $show_current ) echo $sep . $before . get_the_title() . $after;  			elseif ( $show_last_sep ) echo $sep;    		} elseif ( is_tag() ) {  			if ( get_query_var( 'paged' ) ) {  				$position += 1;  				$tagID = get_query_var( 'tag_id' );  				echo $sep . sprintf( $link, get_tag_link( $tagID ), single_tag_title( '', false ), $position );  				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;  			} else {  				if ( $show_home_link && $show_current ) echo $sep;  				if ( $show_current ) echo $before . sprintf( $text['tag'], single_tag_title( '', false ) ) . $after;  				elseif ( $show_home_link && $show_last_sep ) echo $sep;  			}    		} elseif ( is_author() ) {  			$author = get_userdata( get_query_var( 'author' ) );  			if ( get_query_var( 'paged' ) ) {  				$position += 1;  				echo $sep . sprintf( $link, get_author_posts_url( $author->ID ), sprintf( $text['author'], $author->display_name ), $position );  				echo $sep . $before . sprintf( $text['page'], get_query_var( 'paged' ) ) . $after;  			} else {  				if ( $show_home_link && $show_current ) echo $sep;  				if ( $show_current ) echo $before . sprintf( $text['author'], $author->display_name ) . $after;  				elseif ( $show_home_link && $show_last_sep ) echo $sep;  			}    		} elseif ( is_404() ) {  			if ( $show_home_link && $show_current ) echo $sep;  			if ( $show_current ) echo $before . $text['404'] . $after;  			elseif ( $show_last_sep ) echo $sep;    		} elseif ( has_post_format() && ! is_singular() ) {  			if ( $show_home_link && $show_current ) echo $sep;  			echo get_post_format_string( get_post_format() );  		}    		echo $wrap_after;    	}  } // end of dimox_breadcrumbs()  

dimox.name

Поделиться:
Нет комментариев

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

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

×
Рекомендуем посмотреть
Adblock
detector