Хлебные крошки (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 '
    • ' . $separator . '
'; 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 '
    • ' . $separator . '
'; } $custom_tax_name = get_queried_object()->name; echo '
    • ' . $custom_tax_name . '
'; } 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 '
    • ' . $separator . '
'; } // Рубрика $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.= '
    • ' . $parents . '
'; $cat_display.= '
    • ' . $separator . '
'; } } // Если это пользовательский тип записи в пользовательской таксономии $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 '
    • ' . get_the_title() . '
'; // Иначе, если пост в пользовательской таксономии } else if (!empty($cat_id)) { echo ' '; echo '
    • ' . $separator . '
'; echo '
    • ' . get_the_title() . '
'; } else { echo '
    • ' . get_the_title() . '
'; } } 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.= '
    • ' . $separator . '
'; } // Отобразить родителей страницы echo $parents; // Текущая страница echo '
    • ' . get_the_title() . '
'; } else { // Просто отобразить текущую страницу, если нет родителей echo '
    • ' . get_the_title() . '
'; } } 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 '
    • ' . $get_term_name . '
'; } elseif (is_day()) { // АРХИВ ДНЯ // Архив года echo ' '; echo '
    • ' . $separator . '
'; // Архив месяца echo ' '; echo '
    • ' . $separator . '
'; // Архив дня echo '
    • ' . get_the_time('jS') . ' ' . get_the_time('M') . ' Archives
'; } else if (is_month()) { // АРХИВ МЕСЯЦА // Архив года echo ' '; echo '
    • ' . $separator . '
'; // Архив месяца 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 '
    • ' . 'Error 404' . '
'; } } }

Затем отображаем хлебные крошки на вашей странице (например: 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 имеет большой функционал по навигации.