В архивах woocommerce выводит категории и товары в один список (если включить настройку выводить категории и товары). Но нам, например, необходимо категории оформить по другому. Для этого нужно отделить категории от товаров разделив список.
Разделение
Включаем настройку отображения Показывать товары, при этом будут выводится все товары категории и подкатегорий, это и хорошо!, т.к. выведенные сверху подкатегории будут служить фильтром.
Включаем такой хук:
// Отделяем категории от товаров function tutsplus_product_subcategories( $args = array() ) { $parentid = get_queried_object_id(); $args = array( 'parent' => $parentid ); $terms = get_terms( 'product_cat', $args ); if ( $terms ) { echo '<ul class="product-cats">'; foreach ( $terms as $term ) { echo '<li class="category">'; echo '<a href="' . esc_url( get_term_link( $term ) ) . '" class="' . $term->slug . '">'; woocommerce_subcategory_thumbnail( $term ); echo '<h3>'.$term->name.'</h3>'; echo '</a>'; } echo '</ul>'; } } add_action( 'woocommerce_before_shop_loop', 'tutsplus_product_subcategories', 50 );
Функция создает новый список с категориями перед товарами. Стили можно позаимствовать/объединить с товарными, для этого ul нужно добавить класс products, а li product. Также можно задать для категорий отдельные стили и верстку.
Еще можно вывести количество товаров в каждой категории, добавить:
echo '<p class="count">'.$term->count.'</p>';
В шаблоне результатов поиска выводятся все родительские категории товаров, независимо от того какие товары мы ищем — это неправильно. Чтобы этого избежать добавим внутри функции проверку if ( !is_search() ) { }
Отдельные шаблоны
Бывает необходимо разделить вывод категорий и товаров в разные шаблоны.
Спасибо за Ваше решение! Долго искал и не мог найти рабочее. Стилями и тегами подогнал под то, что мне было нужно. Все выглядит и работает как надо.
Спасибо! Но должен сказать, что данное решение не мое. Нашел на каком-то из зарубежных сайтов. Проверил и тоже решил, что решение неплохое.
Спасибо, все работает, кроме if ( !is_search() ) { } — категории все равно отображаются в поиске.Можно как-то исправить?
Добрый день. Столкнулся с такой проблемой. У меня на сайте товары, которых нет в наличии, скрываются с сайта, а с Вашим кодом у меня в списке категорий появляются категории, в которых нет ни одного товара (по факту они есть, но скрыты, т.к. нет в наличии). Я внес маленькое изменение в Ваш код, чтобы категории с нулевым кол-вом товаров не отображались в списке категорий.
// Отделяем категории от товаров
function tutsplus_product_subcategories( $args = array() ) {
$parentid = get_queried_object_id();
$args = array(
‘parent’ => $parentid
);
$terms = get_terms( ‘product_cat’, $args );
if ( $terms ) {
echo ‘<ul class=»product-cats»>’;
foreach ( $terms as $term ) {
$amount = $term->count;
if ($amount == ‘0’) {
echo »;
}
else {
echo ‘<li class=»category»>’;
echo ‘<a href=»‘ . esc_url( get_term_link( $term ) ) . ‘» class=»‘ . $term->slug . ‘»>’;
woocommerce_subcategory_thumbnail( $term );
echo ‘<h3>’.$term->name.'</h3>’;
echo ‘</a>’;
}
}
echo ‘</ul>’;
}
}
add_action( ‘woocommerce_before_shop_loop’, ‘tutsplus_product_subcategories’, 50 );
Кавычки придется восстановить, обработчик сообщений весь код херит, не могу его ввести нормально даже через тег <code>.