我正在尝试根据以下表单输入字段创建一个简单的表单来查询woocommerce产品wine:
所选类别(葡萄类型,例如红酒,白葡萄酒等)-输入类型下拉菜单
选择酒厂标签1下拉列表
选择“葡萄酒分类标签2”下拉列表
选择葡萄酒产区的Tag 3下拉列表
价格范围下拉列表
按类别和价格进行过滤是可行的,但是标签给出的结果参差不齐,我不知道为什么。
这是我的表单提供上下文的样子:
这是我的代码:
$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
)是从价格到价格的变量。
有人知道为什么会这样吗?
答案 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'
) ),
);
由于我已经使用不同的过滤器标签对其进行了测试,并且是否像我计划的那样工作,因此是否有这样做的不利方面?