Есть один замечательный плагин AJAX Search for WooCommerce. Плагин позволяет посетителям вашего сайта легко и быстро производить поиск по товарам. Он будет отображать результаты мгновенно при вводе запроса в поле поиска. Вы можете отобразить эту форму поиска в любом месте на странице.
Просто введите несколько букв (количество настраивается), и появятся товары, которые наилучшим образом соответствуют вашему поисковому запросу.
Предложения могут отображаться в простой форме (только названия товаров) или в расширенной форме (включая фотографии, цены, описание, расширенную информацию и т. д.).
AJAX Search for WooCommerce был разработан, чтобы максимально расширить возможности поиска для пользователей.
Возможности плагина
- Поиск в названиях товаров, описаниях, отрывках, категориях, тегах или артикулах.
- Миниатюра товара может отображаться для каждого предложения
- Цена может отображаться для каждого предложения
- Описание может отображаться для каждого предложения
- Артикул (sku) может отображаться для каждого предложения
- Кнопка «добавить в корзину» и мета отображается при наведении указателя мыши на предложение
- Категории и теги в качестве предложений
- Ограничение отображаемых предложений — вы можете установить свои собственные
- Минимальное количество символов, необходимых для отображения предложений — вы можете установить свои собственные
- Совместимость с WPML
- Вы можете установить свою собственную надпись на кнопке поиска
- Вы можете установить собственный прелоадер
- Вы можете настроить собственную палитру для 10 основных элементов формы и предложений
- Интеграция WP Tao — позволяет отслеживать и анализировать результаты поиска пользователей веб-сайта. Каждый клик по предложению регистрируется.
Доработка напильником для вариаций
Плагин с помощью фильров-хуков модифицирует стандартное поведение WP при поиске.
Хуки posts_search, posts_where, posts_distinct, posts_join — модифицируют SQL запросы.
Фильтр pre_get_posts модифицирует выдачу WP_Query.
Наша задача найти и заменить все вхождения значения параметров post_type с ‘product’ на [‘product’, ‘product_variation’], таким образом мы и добавим вариации в выдачу.
Изначально я пробовал заменить только константу DGWT_WCAS_WOO_PRODUCT_POST_TYPE, который автор плагина использовал для подстановки значения post_type.
Но позже пришлось отказаться от этого, константы объявляются там немного необычно, и почему-то не всегда своевременно, после хуков, соответственно были undefined.
Так что нужно искать и вхождения DGWT_WCAS_WOO_PRODUCT_POST_TYPE + не стоит забывать про несовместимость типов (было string, стало array), со всеми вытекающими.
Примеры таких замен:
$args = array( 's' => $keyword, 'post_type' => ['product', 'product_variation'], // было DGWT_WCAS_WOO_PRODUCT_POST_TYPE 'post_status' => 'publish', 'ignore_sticky_posts' => 1, 'orderby' => $ordering_args[ 'orderby' ], 'order' => $ordering_args[ 'order' ], 'suppress_filters' => false );
$query->query_vars[ 'post_type' ] = ['product', 'product_variation'];
$this->define( 'DGWT_WCAS_WOO_PRODUCT_POST_TYPE', ['product', 'product_variation'] );
Я не люблю лезть в сторонние плагины, т. к. при обновлении изменения затрутся, но тут пример решения на скорую руку.
К тому же решение может оказаться не полным, возможно придется редактировать вордпресс-тему, проблема не такая простая как кажется на первый взгляд, нельзя просто так взять и добавить поддержку вариаций 🙂
Надеюсь автор добавит вариативные товары в новых версиях своего плагина, а пока прилагаю файлы с фиксами как временное решение.