Запрос по категории продукта, тегам продукта и цене в Woocommerce - PullRequest
0 голосов
/ 15 февраля 2019

Я пытаюсь создать простую форму для запроса вина woocommerce продуктов на основе полей ввода формы следующим образом:

  • Выбранная категория (тип вина, например, красное вино, белое вино и т. Д...) - Раскрывающийся список типов входных данных

  • Выберите раскрывающийся список "Винзавод тега 1"

  • Выберите раскрывающийся список "Сортировка вина 2"

  • Выберите винный регион Раскрывающийся список тегов 3

  • Раскрывающийся список диапазона цен

Фильтрация по категориям и ценам работает, однако теги дают смешанные результаты ия не могу понять, почему.

Вот так выглядит моя форма, чтобы дать некоторый контекст:

enter image description here

Вот мой код:

$custom_query_args = array(
      'post_type'               => 'product',
      'post_status'             => 'publish',
      'ignore_sticky_posts' => 1,
      'order'               => 'DESC',
      'posts_per_page'      => 3,
      'product_tag'           => array($tag1, $tag2, tag3), 
      'tax_query'           => array(
             array(
               'taxonomy'       => 'product_cat',
               'terms'      => array( esc_attr( $category ) ),
               'field'      => 'slug',
               'operator'       => 'OR'                            
                      )),
                //Price
                'meta_query' => array(
                    array(
                        'key' => '_price',
                        'value' => array($clow, $chigh),
                        'compare' => 'BETWEEN',
                        'type' => 'NUMERIC'
                    )
              )
        );

Из полей ввода у меня есть 3 переменные для тегов продуктов (например, $tag1, $tag2, $tag3), 1 переменная для категории продуктов (например, $category) и 2 переменныедля ценового диапазона (например, $clow и $chigh), где указана цена от.

У кого-нибудь есть идея, почему это происходит?

Ответы [ 2 ]

0 голосов
/ 21 февраля 2019

Я нашел более простой способ сделать это, и его лучше, потому что, когда нет фильтров, он будет отображать все продукты, и запрос также будет меньше, например:

    $category = 'category-slug-here'; //String, but can accept array?
    $tags = 'comma,delimeted,tags,here'; //I build string with tags needed no array.
    $clow = 0; //min price int
    $chigh = 200; //max price int

                $custom_query_args = array(
                    'posts_per_page' => '12',
                    'product_cat' => $category,
                    'post_type' => 'product',
                    'product_tag' => $tags,
                    // Price filter
                    'meta_query'  => array( array(
                        'key'     => '_price',
                        'value'   => array($clow, $chigh),
                        'compare' => 'BETWEEN',
                        'type'    => 'NUMERIC'
                    ) ),
                );

Есть ли плохие стороны, которые делаютэто так, так как я проверил его, используя различные теги фильтра, и он работает так, как я планировал?

0 голосов
/ 16 февраля 2019

В вашем коде есть несколько небольших ошибок:

  • Отсутствует $ в tag3,
  • OR не является значением operator (и это не нужно),
  • Каждый тег продукта должен находиться в массиве tax_query , чтобы ваши фильтры работали.

Поэтому попробуйте следующий измененный код:

$custom_query_args = array(
    'posts_per_page'      => 3,
    'post_type'           => 'product',
    'post_status'         => 'publish',
    'ignore_sticky_posts' => 1,
    'order'               => 'DESC',
    'tax_query'           => array(
        // Product category filter
        array(
            'taxonomy' => 'product_cat',
            'terms'    => array( esc_attr( $category ) ),
            'field'    => 'slug',
        ),
        // Product tag 1 filter
        array(
            'taxonomy' => 'product_tag',
            'terms'    => array($tag1),
            'field'    => 'slug',
        ),
        // Product tag 2 filter
        array(
            'taxonomy' => 'product_tag',
            'terms'    => array($tag2),
            'field'    => 'slug',
        ),
        // Product tag 3 filter
        array(
            'taxonomy' => 'product_tag',
            'terms'    => array($tag3),
            'field'    => 'slug',
        ),
    ),
    // Price filter
    'meta_query'  => array( array(
        'key'     => '_price',
        'value'   => array($clow, $chigh),
        'compare' => 'BETWEEN',
        'type'    => 'NUMERIC'
    ) ),
);

Протестировано и работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...