Хлебные крошки (breadcrumbs) – это навигационный метод отображения всех посещенных страниц, ведущие от домашней страницы до текущей страницы. Все страницы связаны между собой для легкой навигации в обратном направлении. Как правило, крошки находится в верхней части веб-страницы.
Есть множество плагинов WordPress, но они не всегда подходящий для вас вариант Этот код будет иметь хлебные крошки, которые сразу заработают вашем сайте.
Вставляем код в файл function.php, который находиться в папке шаблона вашего сайта:
// Хлебные крошки
function custom_breadcrumbs() {
// Настройки
$separator = '>'; // Разделитель крошек
$breadcrums_id = 'breadcrumbs'; // id блока
$breadcrums_class = 'breadcrumbs'; // class крошек
$home_title = 'Главная'; // Название главной страницы в хлебных крошках
// Если у вас есть какие-либо типы таксономией, добавьте код в переменную ниже (например, product_cat для Woocommerce)
$custom_taxonomy = 'product_cat';
// Получаем запись и запрос
global $post, $wp_query;
// Не отображать на главной
if (!is_front_page()) {
// Начало хлебных крошек
echo '';
echo '
';
if (is_archive() && !is_tax() && !is_category() && !is_tag()) {
echo '
-
- ' . post_type_archive_title($prefix, false) . '
';
} else if (is_archive() && is_tax() && !is_category() && !is_tag()) { // Если запись - пользовательський другой тип записи
$post_type = get_post_type();
if ($post_type != 'post') {
$post_type_object = get_post_type_object($post_type);
$post_type_archive = get_post_type_archive_link($post_type);
echo '
';
echo '
';
}
$custom_tax_name = get_queried_object()->name;
echo '
';
} else if (is_single()) { // Если запись - пользовательський другой тип записи
$post_type = get_post_type();
if ($post_type != 'post') {
$post_type_object = get_post_type_object($post_type);
$post_type_archive = get_post_type_archive_link($post_type);
echo '
';
echo '
';
}
// Рубрика
$category = get_the_category();
if (!empty($category)) {
// Последняя рубрика в цепочке рубрик
$last_category = end(array_values($category));
// Родительськая рубрика
$get_cat_parents = rtrim(get_category_parents($last_category->term_id, true, ','), ',');
$cat_parents = explode(',', $get_cat_parents);
// Перебор родительских категорий и сохранение в переменную $cat_display
$cat_display = '';
foreach ($cat_parents as $parents) {
$cat_display.= '
';
$cat_display.= '
';
}
}
// Если это пользовательский тип записи в пользовательской таксономии
$taxonomy_exists = taxonomy_exists($custom_taxonomy);
if (empty($last_category) && !empty($custom_taxonomy) && $taxonomy_exists) {
$taxonomy_terms = get_the_terms($post->ID, $custom_taxonomy);
$cat_id = $taxonomy_terms[0]->term_id;
$cat_nicename = $taxonomy_terms[0]->slug;
$cat_link = get_term_link($taxonomy_terms[0]->term_id, $custom_taxonomy);
$cat_name = $taxonomy_terms[0]->name;
}
// Проверка, если пост находится в рубрике
if (!empty($last_category)) {
echo $cat_display;
echo '
';
// Иначе, если пост в пользовательской таксономии
} else if (!empty($cat_id)) {
echo '
';
echo '
';
echo '
';
} else {
echo '
';
}
} else if (is_category()) { // На странице рубрики
echo '
-
- ' . single_cat_title('', false) . '
';
} else if (is_page()) {
// Стандартная страница
if ($post->post_parent) {
// Если у страницы есть родитель
$anc = get_post_ancestors($post->ID);
// Получить родителей в правильном порядке
$anc = array_reverse($anc);
// Родительский цикл страницы
if (!isset($parents)) $parents = null;
foreach ($anc as $ancestor) {
$parents.= '
';
$parents.= '
';
}
// Отобразить родителей страницы
echo $parents;
// Текущая страница
echo '
';
} else {
// Просто отобразить текущую страницу, если нет родителей
echo '
';
}
} else if (is_tag()) {
// Страница метки
// Получаем информацию из страницы метки
$term_id = get_query_var('tag_id');
$taxonomy = 'post_tag';
$args = 'include=' . $term_id;
$terms = get_terms($taxonomy, $args);
$get_term_id = $terms[0]->term_id;
$get_term_slug = $terms[0]->slug;
$get_term_name = $terms[0]->name;
// Отображение имени метки
echo '
';
} elseif (is_day()) {
// АРХИВ ДНЯ
// Архив года
echo '
';
echo '
';
// Архив месяца
echo '
';
echo '
';
// Архив дня
echo '
-
- ' . get_the_time('jS') . ' ' . get_the_time('M') . ' Archives
';
} else if (is_month()) {
// АРХИВ МЕСЯЦА
// Архив года
echo '
';
echo '
';
// Архив месяца
echo '
-
- ' . get_the_time('M') . ' Archives
';
} else if (is_year()) {
// АРХИВ ГОДА
echo '
-
- ' . get_the_time('Y') . ' Archives
';
} else if (is_author()) {
// Архив автора
// Информация об авторе
global $author;
$userdata = get_userdata($author);
// Отобразить имя автора
echo '
-
- ' . 'Author: ' . $userdata->display_name . '
';
} else if (get_query_var('paged')) {
// Постстраничный архив
echo '
-
- ' . __('Page') . ' ' . get_query_var('paged') . '
';
} else if (is_search()) {
// Результаты поиска
echo '
-
- Search results for: ' . get_search_query() . '
';
} elseif (is_404()) {
// Страница 404
echo '
';
}
}
}
Затем отображаем хлебные крошки на вашей странице (например: single.php, page.php, archive.php и т.д.):
Теперь крошки нужно немного приукрасить. Ниже некоторые основные стили CSS, просто используйте следующий код в файле стилей .css:
#breadcrumbs{
list-style:none;
margin:10px 0;
overflow:hidden;
}
#breadcrumbs li{
display:inline-block;
vertical-align:middle;
margin-right:15px;
}
#breadcrumbs .separator{
font-size:18px;
font-weight:100;
color:#ccc;
}
Если вы новичок без опыта кодирования WordPress, советуют использовать плагин, WordPress SEO имеет большой функционал по навигации.