在Woocommerce中按产品类别,产品标签和价格查询

时间:2019-02-15 14:24:43

标签: php wordpress woocommerce custom-taxonomy price

我正在尝试根据以下表单输入字段创建一个简单的表单来查询woocommerce产品wine:

  • 所选类别(葡萄类型,例如红酒,白葡萄酒等)-输入类型下拉菜单

  • 选择酒厂标签1下拉列表

  • 选择“葡萄酒分类标签2”下拉列表

  • 选择葡萄酒产区的Tag 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 :(得分:1)

您的代码中有一些小错误:

  • $中缺少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'
    ) ),
);

经过测试可以正常工作。

答案 1 :(得分:0)

我发现执行此操作的简便方法及其更好的方法,因为当没有过滤器时,它将显示所有产品,并且查询也较小,例如:

    $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'
                    ) ),
                );

由于我已经使用不同的过滤器标签对其进行了测试,并且是否像我计划的那样工作,因此是否有这样做的不利方面?