Показать категории товаров в навигационной цепочке WooFramework

Объем поддержки: мы не можем оказывать поддержку по кастомизации в рамках нашей политики поддержки. Если вам нужно изменить этот сниппет или расширить его функциональность, рекомендуем обратиться к Woo Agency Partner или разработчику WooCommerce через Codeable.

Добавьте этот код в файл functions.php дочерней темы или используйте плагин для добавления пользовательского кода, например Code Snippets.

Не добавляйте код напрямую в functions.php родительской темы — при обновлении темы все изменения будут удалены.

/**
 * Показ категорий товаров в хлебных крошках WooFramework
 */

// Хлебные крошки на страницах товаров в формате:
// Главная > Магазин > Категория товара > Товар
add_filter('woo_breadcrumbs_trail', 'woo_custom_breadcrumbs_trail_add_product_categories', 20);

function woo_custom_breadcrumbs_trail_add_product_categories($trail) {

    if ((get_post_type() == 'product') && is_singular()) {

        global $post;

        $taxonomy = 'product_cat';
        $terms = get_the_terms($post->ID, $taxonomy);
        $links = array();

        if ($terms && !is_wp_error($terms)) {

            $count = 0;

            foreach ($terms as $c) {
                $count++;
                if ($count > 1) continue;

                $parents = woo_get_term_parents($c->term_id, $taxonomy, true, ', ', $c->name, array());

                if ($parents != '' && !is_wp_error($parents)) {

                    $parents_arr = explode(', ', $parents);

                    foreach ($parents_arr as $p) {
                        if ($p != '') {
                            $links[] = $p;
                        }
                    }
                }
            }

            // Добавляем конечный элемент хлебных крошек
            $trail_end = get_the_title($post->ID);

            // Вставляем категории в цепочку
            array_splice($trail, 2, count($trail) - 1, $links);

            $trail['trail_end'] = $trail_end;
        }
    }

    return $trail;
}

/**
 * Получение родительских терминов с разделителем
 *
 * @param int $id ID термина
 * @param string $taxonomy таксономия
 * @param bool $link использовать ссылки
 * @param string $separator разделитель
 * @param bool $nicename использовать "чистое" имя
 * @param array $visited уже обработанные термины
 * @return string
 */

if (!function_exists('woo_get_term_parents')) {

function woo_get_term_parents($id, $taxonomy, $link = false, $separator = '/', $nicename = false, $visited = array()) {

    $chain = '';
    $parent = &get_term($id, $taxonomy);

    if (is_wp_error($parent)) {
        return $parent;
    }

    $name = $nicename ? $parent->slug : $parent->name;

    if ($parent->parent && ($parent->parent != $parent->term_id) && !in_array($parent->parent, $visited)) {

        $visited[] = $parent->parent;

        $chain .= woo_get_term_parents(
            $parent->parent,
            $taxonomy,
            $link,
            $separator,
            $nicename,
            $visited
        );
    }

    if ($link) {
        $chain .= '<a href="' . get_term_link($parent, $taxonomy) . '">' . $parent->name . '</a>' . $separator;
    } else {
        $chain .= $name . $separator;
    }

    return $chain;
}

}

Поделиться с друзьями
Документация WooCommerce