Сен
6
13

Как вывести подкатегории WooCommerce отдельно от товаров в магазине

подкатегории WooCommerceПосле интересной заметки о наличии товара в Woocommerce рассмотрю задачу, связанную с подкатегориямии в магазине. Изначально хотел написать более масштабный пост по категориям, но позже решил сузить тему чтобы вас не запутывать. В плагине есть опция с 3-мя способами как можно показывать продукцию в разделах: 1) только товары; 2) подкатегории; 3) совместить оба варианта. В ранних версиях она находилась в меню «Настройки» — «Товары» — «Отображение», позже перенесли в настройщик темы.

Многие используют последний метод дабы посетитель мог самостоятельно выбирать что делать: переходить в нужный архив или сразу просматривать все товары в одном месте. Его и разберем. Разработчикам, кстати, может также пригодиться сниппет позволяющий скрыть категорию и товары из Woocommerce каталога.

К сожалению, в шаблоне WooCommerce для страницы каталога все элементы выводятся «слитно» — и продукция, и разделы размещены в совместном блоке кода.

Категории и товары в архиве

На скриншоте выше видно как объекты отображаются в один ряд: сначала идут WooCommerce подкатегории (в примере без превью), а затем сразу товары. Основная цель хака заключается в том, чтобы отделить эти два, разных по сути, понятия. Реализация подсмотрена из этой статьи. Однако там автор создавал отдельный модуль для решения, я же предлагаю просто добавить весь код в файл функций.

Хак вывода подкатегорий WooCommerce

1. Итак первым делом заходим в настройки модуля в раздел «Товары» — «Отображение». В опции «На странице категории» выбираем показ только самой продукции:

Настройка отображения товаров в WooCommerce

2. Открыв файл archive-product.php в папке wp-content/plugins/woocommerce/templates, увидите как формируется структура страницы архива магазина.

В частности найдете там функцию woocommerce_product_subcategories(), которая производит вывод категорий и подкатегорий WooCommerce перед обработкой непосредственно товаров.

Функции в шаблоне архива

Хорошая новость в том, что вы без проблем можете переопределить данную функцию в своем шаблоне, а затем вызывать ее в хуке woocommerce_before_shop_loop.

3. Вам нужно добавить в файл функций (для темы магазина это вероятнее всего custom-function.php) следующие строки:

function mynew_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">';                        
	                woocommerce_subcategory_thumbnail( $term ); 
	                echo '<h2>';
	                    echo '<a href="' .  esc_url( get_term_link( $term ) ) . '" class="' . $term->slug . '">';
	                        echo $term->name;
	                    echo '</a>';
	                echo '</h2>';                                                        
	            echo '</li>';                                                        
	    }
	    echo '</ul>';
	}
}
 
add_action( 'woocommerce_before_shop_loop', 'mynew_product_subcategories', 50 );

В данном коде определяется ID объекта из query запроса и осуществляется поиск всех элементов магазина, для которых он является родительским. Дальше в блоке foreach задается как именно вы хотите вывести подкатегории в WooCommerce. Здесь:

  • woocommerce_subcategory_thumbnail — отвечает за миниатюру (если нужно);
  • название $term->name оборачивается в ссылку (тег А);
  • можете поменять классы стилей в элементах списка.

Сохраняете файл, загружаете его обратно на FTP и проверяете как все работает.

4. Изначально оформление будет смотреться немного коряво, поэтому вам придется добавить стили (в main-style.css, style.css или другой файл):

ul.product-cats li {
    list-style: none;
    margin-left: 0;
    margin-bottom: 4.236em;
    text-align: center;
    position: relative;
}
ul.product-cats li img {
    margin: 0 auto; 
}
 
@media screen and (min-width:768px) {
 
    ul.product-cats {
        margin-left: 0;
        clear: both;
    }
    ul.product-cats li {
        width: 29.4117647059%;
        float: left;
        margin-right: 5.8823529412%;
    }
    ul.product-cats li:nth-of-type(3) {
        margin-right: 0;
    }
 
}

Это лишь пример оформления от автора сниппета, изменяйте его как угодно под свою тему. Строки после min-width:768px отвечают за меньшие версии экрана. После внесения правок, смотрите результат. Не забывайте, кстати, следить за правильным размером изображений товара WooCommerce дабы фотки не получались размытыми.

5. Если вам нужно чтобы отображались даже те подкатегории, где нет продукции, добавьте дополнительный параметр в $args при вызове функции get_terms (третья строка в коде):

$args = array(
	'parent' => $parentid,
 	'hide_empty' => false
);

Я тестировал данный пример на реальном сайте — все работает отлично. Возможно, какими-то хитрыми CSS методами получится все реализовать без дополнительной функции либо данная фишка исправлена в новой WooCommerce 3.0 (я тестировал на ветке 2.6.x), но, как бы там ни было, этот пример будет хорошей практикой начинающим WordPress разработчикам.

Если есть что добавить по выводу подкатегорий в WooCommerce пишите ниже: вопросы, дополнения, замечания. 

рейтинг Оцените статью:
Ужасная статьяНичего интересногоТак себеНормальноХорошоКлассный постВ закладки!
(голосов - 3, средний балл: 6,67 из 7)
Загрузка...

категория Категории: WooCommerce;
теги Теги: , , , , .

комментариев 13 к статье “Как вывести подкатегории WooCommerce отдельно от товаров в магазине”

  • Yaroslav.CH   21.09.2017

    В ветке 3.x (про 2.х — уже не помню, давно было) в выпадающем меню «На странице категории» есть 3 пункта:
    1. показывать товары
    2. показывать подкатегории
    3. отображать подкатегории и товары.
    Как я понимаю, тебе просто нужен был 2-й пункт :)

  • Лариса   06.03.2018

    здравствуйте!
    воспользовалась вашим кодом — наконец-то появились подкатегории! но и товары остались — не подскажете, как убрать их вывод? спасибо)

  • Лариса   06.03.2018

    вдогонку)
    archive-product.php выглядит так:
    if (have_posts()) : ?>

    <a href="#" class="»
    title=»»>

    <a href="#" title="»
    class=»layout-control grid-layout «>

    <a href="#" title="»
    class=»layout-control list-layout «>

    <img src="» alt=»column-1″ />
    <img src="» alt=»column-2″ />
    <img src="» alt=»column-3″ />
    <img src="» alt=»column-4″ />
    <img src="» alt=»column-5″ />

    woocommerce_product_loop_start(false), ‘after’ => woocommerce_product_loop_end(false)))) :
    wc_get_template(‘loop/no-products-found.php’);
    endif;

  • Tod   06.03.2018

    Лариса, если честно, не совсем понял вопрос. В настройке WooCommerce магазина для страницы категорий продукции есть 3 вида отображения: товары, подкатегории и все вместе. Если вам нужно убрать товары, просто выбираете соответствующую опцию, хак для этого не нужен. Данный код просто позволяет выводить элементы чуть более другим способом нежели обычно.

  • Алексей   17.05.2018

    Подскажите, как сделать так чтобы после перехода категории, внутри отображались все подкатегории, в моем случае отображаются только те подкатегории в которых есть товар.

  • Tod   19.05.2018

    Алексей, дописал 5тый пункт в алгоритме — посмотрите. Там оказывается можно добавить одну переменную в код, и будут выводиться все рубрики, даже без продукции.

  • Василий   01.09.2018

    Использую wordpress и woocommerce. Хочу сделать так, чтобы на главной странице магазина отображались только основные рубрики товара. Также, чтобы при клике на основную рубрику показывалась страница только с одними подрубриками (если они есть). А товары появлялись только тогда, когда кликнешь непосредственно на ту основную рубрику или подрубрику или подподрубрику, в которую эти товары непосредственно помещались. Как такое можно организовать? Например, есть такая структура рубрик:

    Напитки
    -чай
    —черный
    —товар1
    —товар2
    -кофе
    —растворимый
    —товар1
    Хлеб
    -черный
    —товар1

    Вот если зайти на страницу магазина то должны появляться только основные рубрики «Напитки» и «Хлеб». При клике на «Напитки» должна появляться страница только с подрубриками «чай», «кофе». При клике на «чай» должна появляться страница только с подрубрикой «черный». И только по клику по рубрике «черный» появлялась страница с товаром 1 и товаром 2.

  • Tod   03.09.2018

    Василий, данная функциональность есть в модуле WooCommerce по умолчанию. Раньше она была в его настройках, но в последних версиях ее перенсти в раздел «Внешний вид» — «Настроить». Там будет группа настроек WooCommerce, в которых выбираете пункт Product Catalog. Затем увидите 2 опции: Shop page display — что показываеть на главной магазина (выбираете категории) и Category display — что показывать на странице категории (выбираете подкатегории). Тогда путь к конкретным товарам будет такой, как вам нужно в задаче.

  • Верстальщик   13.10.2018

    На текущий момент настройки отображения/вывода товаров перенесли в кастомайзер. Способ вывода подкатегорий, описаный в статье, по любому пригодится разработчику, если строить кастомную тему woocommerce. Метод рабочий и получилось удовлетворить запросы заказчика.

  • Tod   13.10.2018

    Верстальщик, да, настройки модуля слегка поменялись, не было времени обновить скрины.

  • Анна   25.11.2018

    Добрый день!
    Подскажите, как исключить некоторые категории, чтобы они не отображались в каталоге

  • Tod   26.11.2018

    Анна, я чуть позже обновлю пост, но если ждать некогда поищите в гугле «woocommerce exclude categories» — как минимум, 2-3 статьи с примерами кода по теме есть.

  • Tod   28.11.2018

    Анна, написал пост по вашему вопросу — про то как можно скрыть категорию и товары из Woocommerce каталога.

Оставить комментарий


Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!

Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:

Поиск:
Последние посты
Заработай в GoGetLinks
Лучшее в категории
Облако тегов
Скажи свое мнение!

В чем основные плюсы Wordpress?

Посмотреть результаты

Загрузка ... Загрузка ...
Друзья проекта
Последние новости