Как отфильтровать по нескольким аттрибутам?
Добрый день.
/products?attribute=pa_item_color&attribute_term=19 |
/products?attribute=pa_item_color&attribute_term=19
Такой запрос работает и дает мне фильтр только по цвету, а мне нужно по цвету и например размеру
/products?attribute=pa_item_color,pa_item_size&attribute_term=19 |
/products?attribute=pa_item_color,pa_item_size&attribute_term=19
Типа такого, но тогда не понятно к чему будет относится attribute_term.
В доке ниче не сказано, значит решения нет?Для такой казалось бы базовой вещи?
Дополнительно:
Добрый
А так разве не работает?
/products?attribute=pa_item_color&pa_item_size&attribute_term=19 |
/products?attribute=pa_item_color&pa_item_size&attribute_term=19
Или так?
/products?attribute=pa_item_color&attribute=pa_item_size&attribute_term=19 |
/products?attribute=pa_item_color&attribute=pa_item_size&attribute_term=19
И могу ошибаться, но, вроде, так работало
/products?attribute=pa_item_color=19&pa_item_size='some-id' |
/products?attribute=pa_item_color=19&pa_item_size='some-id'
Притом в запросе можно несколько ид указать, через запятую
/products?attribute=pa_item_color=19,20,21&pa_item_size=1,2,3 |
/products?attribute=pa_item_color=19,20,21&pa_item_size=1,2,3
REST нужен для работы с внешними приложениями, и не понимаю на кой ходить через зад, если проще и быстрее использовать родные функции.
(Эх, твою бы энергию да в мирное русло...)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
В стандартном WooCommerce REST API фильтрация товаров по нескольким атрибутам через параметры
attributeиattribute_termдействительно ограничена. Эти параметры рассчитаны на простой сценарий, где атрибут и term идут одной парой. Для сложной фильтрации по цвету, размеру и другим атрибутам лучше делать собственный endpoint или использовать параметры taxonomy queries на серверной стороне.Если Вы работаете с WordPress/WooCommerce из Next.js, самый надёжный путь — создать свой REST endpoint, который принимает структуру фильтров:
{ "pa_item_color": [19], "pa_item_size": [25, 26] }{ "pa_item_color": [19], "pa_item_size": [25, 26] }
На стороне WordPress собираете
tax_query:$tax_query = ['relation' => 'AND']; foreach ($filters as $taxonomy => $terms) { $tax_query[] = [ 'taxonomy' => sanitize_key($taxonomy), 'field' => 'term_id', 'terms' => array_map('absint', $terms), 'operator' => 'IN', ]; } $query = new WP_Query([ 'post_type' => 'product', 'posts_per_page' => 24, 'tax_query' => $tax_query, ]);
relation => ANDозначает: товар должен подходить и по цвету, и по размеру. Внутри одного атрибутаINозначает: любой из выбранных term.Если пытаться запихнуть несколько атрибутов в один URL стандартного endpoint, быстро становится непонятно, какой
attribute_termк чему относится. Поэтому документация и не даёт красивого варианта для сложного фильтра.Итог: для базовой фильтрации можно использовать штатные параметры. Для нормального каталога с несколькими атрибутами делайте свой endpoint или серверную прослойку, где явно передаёте пары taxonomy → terms и строите
tax_query.