WooCommerce вывести подкатегории в категориях

0 из 5, голосов: 0
152
Я установил свою простую и легкую тему WordPress.

В WooCommerce никак не выводились подкатегории в категориях - выводился только список товаров.

Настройка через админку никак не изменила ситуацию (Внешний вид - Настроить - WooCommerce - Каталог товаров - Отображение категории - Отображать подкатегории и товары).

Т.к. тема моя, она очень простая и в ней не было функции вывода подкатегорий в категориях для WooCommerce.

Способ 1 - простой и правильный

Нашел у доброго человека: webformyself.com

Решение

-1-

В файл шаблона functions.php необходимо добавить:

//Объявляем поддержку WooCommerce
add_action( 'after_setup_theme', function() {add_theme_support( 'woocommerce' );});
//Включаем WooCommerce галерею товаров, Zoom и LightBox (v3.0+)
add_theme_support( 'wc-product-gallery-slider' );
add_theme_support( 'wc-product-gallery-zoom' );
add_theme_support( 'wc-product-gallery-lightbox' );
//Плюс до и после контента в шаблоне надо добавить <div class="woocommerce"></div>
-2-

В шаблон темы до и после контента, который выводит магазин (каталог товаров, категории, страницы товаров) необходимо добавить <div> с классом class="woocommerce", то есть КОНТЕНТ должен отображаться в указанном ниже <div>:

<div class="woocommerce">КОНТЕНТ</div>
WooCommerce сам включит и правильно отобразит подкатегории в категориях.

Пример: https://noskilorenz.ru/product-category/collection/



Способ 2 - использовал его, пока не нашел 1-й способ

Нашел у доброго человека код: disweb.ru. Немного упростил.

Решение: для отображения подкатегорий в категориях необходимо в файл шаблона functions.php добавить код:

function print_shop_product_subcategories($args = [])
{

if (empty($_GET['product-page'])) $page = 1; else $page = $_GET['product-page'];//получаем номер текущей страницы

	$parentid = get_queried_object_id();
	$args = [
		'parent' => $parentid
	];
	$terms = get_terms('product_cat', $args);
	if ($terms and $page==1)
	{
	echo '<ul class="products columns-3">';//3 - значит 3 колонки
	$i = 1;//счетчик для столбцов, если $i==1, то отображаем first, если $i==3, то отображаем last
	foreach ($terms as $term)
		{
		if ($i==4) $i = 1;//если началась следуюущая строчка, начинаем считать с первой колонки
		echo '<li class="product-category product'; if ($i==1) echo ' first'; if ($i==3) echo ' last'; echo '">';//3 - значит 3 колонки
		$i++;
		echo '<a href="'.(esc_url(get_term_link($term))).'" class="cat-'.($term->slug).'">';
		woocommerce_subcategory_thumbnail($term);
		echo $term->name;
		echo '</a>';
		echo '</li>';
		}
	echo '</ul>';
	}
}

add_action('woocommerce_before_shop_loop', 'print_shop_product_subcategories', 30);


[0.011335]