Как отфильтровать по нескольким аттрибутам?

Ссылка скопирована
1 ответ

Добрый день.

/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

  • Владимир, так терм это же терм самой вариации, то есть я обращаюсь к терму какой то вариации(какой?)
  • Плагинофобия?
  • godsplane, не нашел у себя пример. потерялся
    И могу ошибаться, но, вроде, так работало
    /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

  • Refguser, нет,е сли есть плагин который поддерживает рест апи, то я не против
  • Владимир, это v3 api?У меня так не работает
  • godsplane, к сож сейчас множество плагинов работают через REST-АPI, там где этого нафик не нужно. А я даже не заморачивался изучать работает ли какой-то конкретный плагин фильтра через этот анус. Возможно что и многие.(у HUSKY вроде было упоминание, но я не изучал).
    REST нужен для работы с внешними приложениями, и не понимаю на кой ходить через зад, если проще и быстрее использовать родные функции.
  • Refguser, ну потому что у меня вп это headless cms, а сам фронт на next.js
  • godsplane, аа.. тады понятно.. Но плагины посмотри - возможно что и найдутся подходящие.

    (Эх, твою бы энергию да в мирное русло...)

  • Refguser, еще бы понять какой из 100000+ плагинов эо поддерживает, а то проверять каждый в ручную не хочется
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Максим Павлов Ответ

    В стандартном 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,
    ]);

    $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.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно