WordPress как на ладони

Kama Breadcrumbs

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

Это новая версия — более простой, стабильный, расширяемый и понятный код. Измененная система хуков. Дополнительный функционал. Прошлый код значительно доработан.

Плагин содержит отдельный класс, который можно «забрать» из плагина и встроить в тему или другой плагин. Однако, если вы делаете плагин или тему на продажу, то вам нужно будет приобрести лицензию разработчика (Dev лицензию).

Использование

Используйте следующий код в файле темы, там где нужно вывести крошки:

<?php echo kama_breadcrumbs(); ?>

Также можно передать параметры:

<?php echo kama_breadcrumbs( $args, $l10n ); ?>
$args(мпссив)

Параметры крошек. Все параметры по умолчанию:

// Параметры по умолчанию
$args = array(

	'sep'             => ' » ', // разделитель. Можно указать вместе с HTML оберткой: <span> > </span>
	'on_front_page'   => true,  // выводить крошки на главной странице
	'show_post_title' => true,  // показывать ли название записи в конце (последний элемент). Для записей, страниц, вложений
	'show_term_title' => true,  // показывать ли название элемента таксономии в конце (последний элемент). Для меток, рубрик и других такс

	'last_sep'        => true,  // показывать последний разделитель, когда заголовок в конце не отображается
	'nofollow'        => false, // добавлять rel=nofollow к ссылкам?

	'priority_tax'    => array(),
						 // с версии 4.7. приоритетные таксономии, нужно когда запись в нескольких таксах: array( 'category', 'tax_name' ).
						 // Порядок имеет значение: чем раньше тем важнее.
						 // В значениях можно указать приоритетные термины, тогда название таксономии нужно указывать в ключе.
						 // когда запись находится в нескольких элементах одной таксы одновременно.
						 // Например: array( 'category'=>array(45,'term_name','имя терма'), 'tax_name'=>array(1,2,'name') )
						 // 'category' - такса для которой указываются приор. элементы: 45 - ID термина, 'term_name' - ярлык или 'имя терма' - заголовок.
						 // порядок 45, 'term_name' и 'имя терма' имеет значение: чем раньше тем важнее. Все указанные термины важнее неуказанных...

	'disable_tax'     => array(), // таксономии которые нужно исключить из показа в крошках: array('post_tag', 'tax_name')
	'number_tax'      => array(), // позволяет выводить в крошках для записей сразу несколько таксономий.
								  // Пример: array('post'=>2) - для типа записи post выведет крошки для двух таксономий (по умолчанию: category и post_tag).
								  // Поменять порядок также можно в параметре 'priority_tax'.

	'markup'          => 'Microdata',
						 // 'markup' - микроразметка. Может быть: 'Microdata', 'RDFa', '' - без микроразметки
						 // или можно указать свой массив разметки:
						 // array(
						 //     'wrappatt'  => '<div class="kama_breadcrumbs">%s</div>',
						 //     'linkpatt'  => '<a href="%s">%s</a>',
						 //     'titlepatt' => '<span class="kb_title">%s</span>',
						 //     'seppatt'   => '<span class="kb_sep">%s</span>'
						 // )
	'wrap_class'      => 'kama_breadcrumbs', // css класс для главного div
	'title_class'     => 'kb_title',         // css класс заголовка элемента
	'sep_class'       => 'kb_sep',           // css класс разделителя

);
$l10n(массив)

Параметры локализации. Строки переводятся на англ. если у сайта выбран англ. язык. По умолчанию:

// Локализация
$l10n = array(
	'home'       => 'Главная',
	'paged'      => 'Страница %d',
	'_404'       => 'Ошибка 404',
	'search'     => 'Результаты поиска по запросу - <b>%s</b>',
	'author'     => 'Архив автора: <b>%s</b>',
	'year'       => 'Архив за <b>%d</b> год',
	'month'      => 'Архив за: <b>%s</b>',
	'day'        => 'Архив за <b>%1$s число</b>, %2$s', // Архив за 5 число, среда
	'attachment' => 'Медиа: %s',
	'tag'        => 'Записи по метке: <b>%s</b>',
	'tax_tag'    => '%1$s из "%2$s" по тегу: <b>%3$s</b>',
	// tax_tag выведет: 'тип_записи из "название_таксы" по тегу: имя_термина'.
	// Если нужны отдельные холдеры, например только имя термина, пишем так: 'записи по тегу: %3$s'
);
меню

Фильтры (хуки)

// фильтрует строки локализации - $l10n - это массив
$l10n = apply_filters( 'kama_breadcrumbs_l10n', $l10n );

// фильтрует параметры - $args - это массив
$args = apply_filters( 'kama_breadcrumbs_args', $args );

// вывод: все виды записей с терминами, или термины
$term = apply_filters( 'kama_breadcrumbs_term', $term );

// возможность изменить элементы крошек
$elms = apply_filters_ref_array( 'kama_breadcrumbs_filter_elements', array( $elms, &$this, $ptype ) );

// возможность изменить элементы крошек, 
// после того, как все элементы были собраны в одномерный (плоский) массив
$flat_elms = apply_filters_ref_array( 'kama_breadcrumbs_filter_flat_elements', array( $flat_elms, &$this, $ptype ) );

// фильтрует готовый HTML код крошек
return apply_filters( 'kama_breadcrumbs', sprintf( $arg->wrappatt, $out ), $arg->sep, $loc, $arg );

Ниже приведены примеры использования фильтров.

меню

Локализация (строки перевода)

// изменим строки перевода
add_filter( 'kama_breadcrumbs_l10n', function($l10n){
	return array_merge( $l10n, array(
		'home'    => '<i style="display:none;">Главная</i><span class="dashicons dashicons-admin-home"></span>',
		'tax_tag' => 'По метке: <b>%3$s</b>',
	) );
} );

Изменение параметров по умолчанию

// установим параметры по умолчанию
add_filter( 'kama_breadcrumbs_args', function($args){
	return array_merge( $args, array(
		'sep'             => ' › ', // ▸
		'on_front_page'   => 1,
		'show_post_title' => 0,
		//'show_term_title' => 0,
		//'last_sep'      => 0,
		'markup'          =>'RDFa',
		// или своя маркировка
		'markup' => [
			'wrappatt'  => '<div class="kama_breadcrumbs">%s</div>',
			'linkpatt'  => '<li><a href="%s">%s</a></li>',
			'titlepatt' => '<li class="active">%s</li>',
			'seppatt'   => '<span class="kb_sep">%s</span>',
		],
		'priority_tax' => [ 'category', 'tplcat', 'wpfunccat' ]
	) );
} );

Добавление своих элементов в крошки

// добавить свои ссылки в крошки - добавим рубрику funccat, если запись (функция) из этой рубрики.
add_filter( 'kama_breadcrumbs_filter_elements', 'breadcrumbs_add_tplcat', 10, 3 );
function breadcrumbs_add_tplcat( $elms, $class, $ptype ){
	global $post;

	// дебаг - смотрим какие элементы есть в массиве и добавляем куда и что нужно
	// print_r( $elms ); 

	if( is_single() && $terms = get_the_terms($post->ID, 'funccat') ){
		// добавим 2 ссылки (2 элемента) после главной
		$elms['home_after'][] = array(
			$class->makelink('/functions', 'Функции' ),
			$class->makelink('/functions/template_tags', 'Теги шаблона' )
		);
	}

	return $elms;
}

Массив $elms выглядит примерно так (отличается на разных страницах сайта):

Array(

	[home] =>   <span property="itemListElement" typeof="ListItem">
					<a href="http://site.ru" property="item" typeof="WebPage"><span property="name"><i style="display:none;">Главная</i><span class="dashicons dashicons-admin-home"></span></span></a>
					<meta property="position" content="ORDERNUM" />
				</span>

	[home_after] => Array(
			[0] =>  <span property="itemListElement" typeof="ListItem">
						<a href="/functions" property="item" typeof="WebPage"><span property="name">Функции</span></a>
						<meta property="position" content="ORDERNUM" />
					</span>
			[1] =>  <span property="itemListElement" typeof="ListItem">
						<a href="/functions/template_tags" property="item" typeof="WebPage"><span property="name">Теги шаблона</span></a>
						<meta property="position" content="ORDERNUM" />
					</span>
	)

	[single] => Array(
			[wpfunccat__tax_crumbs] => Array(
					[0] =>  <span property="itemListElement" typeof="ListItem">
								<a href="http://site.ru/function-cat/miscellaneous" property="item" typeof="WebPage"><span property="name">Прочие функции</span></a>
								<meta property="position" content="ORDERNUM" />
							</span>
					[1] =>  <span property="itemListElement" typeof="ListItem">
								<a href="http://site.ru/function-cat/zaschita-bloga" property="item" typeof="WebPage"><span property="name">Защита</span></a>
								<meta property="position" content="ORDERNUM" />
							</span>
			)

			[title] =>  <span class="kb_title" property="itemListElement" typeof="ListItem">
								<span property="name">form_option</span>
								<meta property="position" content="ORDERNUM">
							</span>
	)

)

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

HTML код ссылки с schema.org разметкой создается через метод

$class->makelink( $url, $title )

Названия ключей массива $elms, например, home_after, нужны, чтобы проще было «сунуть» свою ссылку в нужное место крошек.

Например, когда нужно добавить ссылку после главной:

$elms['home_after'][] = $class->makelink('http://site.ru/functions', 'Функции' );

// или так, сразу несколько ссылок:
$elms['home_after'][] = array(
	$class->makelink('http://site.ru/functions', 'Функции' ),
	$class->makelink('http://site.ru/hooks', 'Хуки' ),
);

// или заменим на свои ссылки (удалим текущее значение home_after)
// добавим сразу несколько ссылок, с заменой текущей крошки:
$elms['home_after'] = array(
	$class->makelink('http://site.ru/functions', 'Функции' ),
	$class->makelink('http://site.ru/hooks', 'Хуки' ),
);
Еще примеры

Смотрите в вопросе.

13 комментов
  • @ Ильяс Фаизов cайт: ifaizov.com

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

    Ответить2 мес назад #
  • Александр

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

    Ответить2 мес назад #
    • Kama7376

      Скиньте плиз HTML код крошек, который при этом получается. Не могу смоделировать что-то...

      Ответить2 мес назад #
    • Kama7376

      Поправил! Версия 4.7.7

      Ответить2 мес назад #
  • Добрый день! купил данный плагин, но не получается активировать лицензию, wp версии 5.1.1

    Ответить18 дней назад #
    • Kama7376

      Работал немного над сервером обновлений, возможно именно в этот момент ты пытался активировать плаг. Попробуй еще раз плз. Если что-то не получается, скинь плз скрин, что за ошибку видишь. У меня все работает, на разных хостингах!

      Ответить18 дней назад #
      • Я не знаю может это и не ошибка вовсе, ведь функционал то выполняется, просто говорит что нет лицензии. При нажатии на кнопку go ничего не происходит

        Ответить17 дней назад #
        • Kama7376

          Открой плз консоль и при открытой консоли нажми на GO. Похоже у тебя какой-то скрипт не отрабатывает и ложит все остальные скрипты, такое не редко бывает.

          Без лицензии обновляться не сможешь, работать все будет.

          Ответить17 дней назад #
Здравствуйте, !     Войти . Зарегистрироваться