HUSKY - WooCommerce Product Filter Professional

Фильтр товаров WooCommerce на отдельной странице или главной

Вы размещаете фильтр товаров WooCommerce на отдельной странице, лендинге или главной, и происходит одно из трёх: форма отображается, но товаров нет; каждый клик отправляет в магазин; страница перезагружается, и ничего не меняется. Ошибки здесь нет. Шорткод [woof] выводит только форму поиска, а где показать результаты, плагин решает по тому, что ещё есть на странице. Ниже разобрано, как принимается это решение, и приведены точные варианты шорткодов для типичных случаев: фильтр и товары на одной странице, страница, ограниченная одной категорией или атрибутом, и форма на главной, которая отправляет посетителей к результатам.

Куда ведёт фильтр товаров WooCommerce на отдельной странице

Когда посетитель нажимает Фильтр (Filter) (или меняет опцию при включённой автоотправке), скрипт плагина собирает ссылку вида ?swoof=1&pa_color=red и ищет на текущей странице список товаров, который можно обновить: вывод [woof_products], шорткод WooCommerce [products] или любой список .products внутри контейнера .woocommerce. Если такой список найден, результаты открываются на той же странице. Если нет, посетитель попадает на страницу магазина — ту, что выбрана в WooCommerce → Настройки → Товары → Страница магазина (WooCommerce → Settings → Products → Shop page).

Что есть на страницеГде появятся результаты
Только [woof]Страница магазина, с выбранными фильтрами
[woof] + [woof_products]Та же страница; без перезагрузки при is_ajax=1
[woof] + шорткод WooCommerce [products]Та же страница, после перезагрузки
[woof redirect="..."] и нет AJAX-сетки товаровURL из redirect
Страница одного товара (сопутствующие товары не в счёт)Страница магазина или URL из redirect

Прежде чем что-то настраивать, стоит знать два следствия. Если в WooCommerce не назначена страница магазина, отправлять посетителя некуда, и фильтр перезагружает ту страницу, на которой находится, включая страницу одного товара. А если на главной есть любой блок с товарами (рекомендуемые товары, карусель распродажи на разметке WooCommerce), фильтр принимает этот блок за сетку результатов и перезагружает главную вместо перехода в магазин.

Фильтр и товары на одной странице

Для страницы, которая работает как небольшой магазин, разместите два шорткода. Они могут находиться в разных блоках или колонках, например форма в узкой колонке, а товары в широкой:

[woof]
[woof_products per_page=12 columns=3 is_ajax=1]
  • per_page: задайте его. Без него [woof_products] берёт значение Товаров на странице (Products per page) со вкладки плагина Продвинутые → Опции (Advanced → Options), а если там -1 (по умолчанию), то настройку WordPress Блог выводит не более (Blog pages show at most), которая на большинстве сайтов равна 10.
  • columns: число товаров в ряду. Учтёт ли это тема, зависит от её CSS.
  • is_ajax=1: результаты заменяются без перезагрузки страницы, а адресная строка обновляется, так что страницей с фильтром можно делиться. При is_ajax=0 страница перезагружается. На отдельной странице AJAX включает именно этот атрибут; опция Попытаться ajax-ифицировать магазин (Try to ajaxify the shop) влияет только на архивы магазина и категорий.

[woof_products] выводит товары карточкой товара вашей темы (шаблон content-product.php) и запускает стандартные хуки цикла WooCommerce, поэтому счётчик результатов, сортировка и пагинация выглядят так же, как на странице магазина.

Шорткод WooCommerce [products] тоже поддаётся фильтрации: пока фильтр активен, HUSKY добавляет свои условия в запрос этого шорткода. [products limit="12" columns="4" paginate="true"] рядом с [woof] работает с перезагрузкой страницы; для AJAX используйте двойник, который регистрирует HUSKY, — [products_woof] с теми же атрибутами.

Ограничить страницу одной категорией, меткой или атрибутом

Странице для одного бренда, одного города или «только восстановленных смартфонов» нужно постоянное условие, которое посетитель не может сбросить. Это атрибут taxonomies, и указывать его нужно в обоих шорткодах:

[woof taxonomies="product_cat:87+product_tag:105" tax_exclude="product_cat,product_tag"]
[woof_products taxonomies="product_cat:87+product_tag:105" per_page=12 columns=3 is_ajax=1]

Синтаксис — таксономия:ID. Несколько ID одной таксономии разделяются запятыми; разные таксономии соединяются знаком +, и должны выполняться все. При логике OR по умолчанию запись product_cat:87,92+pa_brand:14 означает «в категории 87 или 92, и бренд 14», причём товары из дочерних категорий 87 и 92 включаются. Если в настройках плагина вы переключили таксономию на логику AND, эта логика действует и для её ID здесь.

ID терминов, а не слаги и не названия

Плагин превращает каждое значение в термин с указанным ID. Слаг вроде cadeau или название вроде Yes ID не является, ничему не соответствует, и эта часть условия молча отбрасывается, так что страница показывает все товары. Чтобы узнать ID, откройте Товары → Категории (Products → Categories) (или Метки (Tags), или Товары → Атрибуты → Настроить термины (Products → Attributes → Configure terms)), наведите курсор на ссылку Изменить (Edit) нужного термина и прочитайте число после tag_ID= в ссылке.

Название таксономии должно быть точным: product_cat, product_tag, pa_ плюс слаг атрибута для глобальных атрибутов (pa_color, а не color) или слаг пользовательской таксономии, например таксономии брендов. Пользовательские атрибуты, введённые прямо в карточке одного товара, таксономиями не являются и здесь использоваться не могут.

Что делает значение в каждом шорткоде

  • В [woof_products] оно ограничивает товары. Именно эта часть делает основную работу.
  • В [woof] оно ограничивает то, что считает форма: при включённых Показывать количество (Show count) и Динамический пересчёт (Dynamic recount) числа рядом с опциями и диапазон цен описывают то же ограниченное множество, а при Скрывать пустые термины (Hide empty terms) опции, у которых на этой странице нет товаров, исчезают. В режиме AJAX форма перерисовывается после каждой фильтрации со значением из [woof_products], поэтому держите оба значения одинаковыми, иначе после первого клика счётчики изменятся.

Условие не находится в URL; оно часть страницы. Сброс или снятие всех отметок возвращает на эту же страницу, и условие остаётся на месте. Блоки, по которым вы уже отфильтровали, скройте через tax_exclude (названия таксономий через запятую) или соберите короткую форму с помощью tax_only и by_only, например [woof tax_only="pa_brand,pa_size" by_only="by_price"]; by_only="none" скрывает цену, текстовый поиск и другие фильтры, не связанные с таксономиями. Другие комбинации описаны в статье как показать разные фильтры на разных страницах, а полный список атрибутов — на странице шорткода [woof]. Чтобы предварительно фильтровать по мета-полю, а не по таксономии, см. управление данными поиска.

Фильтр на главной с переходом в магазин

Надёжный вариант для главной — форма поиска, которая отправляет посетителей на страницу результатов:

[woof redirect="https://example.com/shop/" autosubmit=1 ajax_redraw=1 tax_only="product_cat,pa_size" by_only="none"]
  • redirect: страница результатов. Это может быть магазин, архив категории, например https://example.com/product-category/tires/ (тогда результаты остаются внутри этой категории, потому что категория указана в адресе), или отдельная страница с [woof] и [woof_products]. Используйте чистый URL без ?; плагин сам допишет к нему ?swoof=1&....
  • Один autosubmit=1 отправляет посетителя дальше при первом же изменении, что подходит для единственного выпадающего списка. Для формы с несколькими полями добавьте ajax_redraw=1: каждый выбор лишь обновляет форму (счётчики, зависимые опции), а кнопка Фильтр (Filter) открывает страницу результатов. При autosubmit=0 ничего не происходит, пока посетитель не нажмёт Фильтр (Filter).

Правила, из-за которых возникает большинство жалоб «редирект не работает»:

  • В режиме AJAX редирект игнорируется. Если на той же странице есть [woof_products is_ajax=1] или [products_woof], форма фильтрует эту сетку.
  • Одна страница — один фильтр. Когда на странице несколько форм, скрипт берёт redirect, autosubmit и ajax_redraw у первой найденной формы. Вторая форма в сайдбаре или автоматический фильтр над товарами могут незаметно переопределить настроенную вами форму. У виджета HUSKY для той же цели есть собственное поле Перенаправлять на (Redirect to).
  • Условие taxonomies в форме на главной вместе с редиректом не передаётся; в URL попадает только то, что выбрал посетитель. Если форма относится к одной категории, перенаправляйте на архив этой категории.

Почему не фильтровать на самой статической главной странице

На обычных страницах фильтрация на месте работает. Статическая главная — исключение: параметры вроде product_cat или product_tag одновременно являются переменными запроса WordPress, и когда они появляются в корневом адресе сайта, WordPress перестаёт считать запрос вашей главной страницей. В зависимости от темы посетители видят архив категории, пустую страницу или заголовок Страница не найдена (Page not found), добавленный SEO-плагином. Разместите фильтр и [woof_products] на обычной странице (например, /products/), а форму на главной настройте на редирект туда.

Показывать товары только после фильтрации

Для лендинга, который должен открываться только с формой, добавьте display_on_search=1 в [woof_products]. Пока фильтр не применён, область товаров остаётся пустой; после первого поиска страница показывает результаты. Документация описывает этот атрибут для режима с перезагрузкой, поэтому используйте его с is_ajax=0. Подробности — на странице шорткода [woof_products].

Страницы одного товара, меню и сетки конструкторов

  • Страницы одного товара. Фильтр в сайдбаре страницы товара всегда открывает магазин (или URL из redirect); сопутствующие и апсейл-товары результатами не считаются.
  • Меню и мега-меню. Ведите пункты категорий на настоящие архивы категорий (/product-category/.../), а не на страницы с шорткодом. Архивы фильтруются без всякой настройки и сохраняют категорию при фильтрации.
  • Сетки товаров конструкторов. Сетка из Elementor, Divi или другого конструктора, которая выполняет собственный запрос товаров, не реагирует на фильтр, даже если форма остаётся на странице. Замените её на [woof_products] или сделайте её запрос фильтруемым, как описано в статье URL фильтра меняется, а товары нет.
  • [woof_products] в шаблонах категорий. Шорткод не знает, в каком архиве категории он размещён; он создан для страниц. В шаблоне категории он покажет все товары, если не передать taxonomies, поэтому оставьте там стандартный цикл товаров архива.

Если всё равно не работает

  • Кавычки прямые. Шорткоды, скопированные из текстового редактора или с некоторых сайтов, приходят с «умными» кавычками (’pa_age’), которые WordPress не принимает как кавычки атрибутов. Наберите их заново в блоке «Шорткод».
  • Каждое значение в taxonomies — числовой ID термина, название таксономии точное, вокруг + и : нет пробелов, а оба шорткода содержат одно и то же значение.
  • У [woof_products] задан per_page, так что страница не останавливается на 10 товарах.
  • В настройках WooCommerce выбрана страница магазина.
  • На странице только одна форма фильтра, либо первая содержит нужный вам redirect.
  • Сетка товаров на странице — это [woof_products], [products] или [products_woof], а не виджет конструктора с собственным запросом.

Если всё это проверено, а страница по-прежнему ведёт себя неправильно, опубликуйте на форуме поддержки HUSKY ссылку на страницу и оба шорткода в точности так, как они записаны в редакторе.