我正在使用WP_Query
用于Woocommerce产品,以尝试查询特定类别的产品。这是对我有用的语法 -
$args = array(
'posts_per_page' => -1,
'product_cat' => 'category-slug-here',
'post_type' => 'product',
'orderby' => 'title',
);
$the_query = new WP_Query( $args );
// The Loop
while ( $the_query->have_posts() ) {
$the_query->the_post();
echo '' . get_the_title() . '<br /><br />';
}
wp_reset_postdata();
这会返回数据,但我想传递一个ID而不是类别slug来过滤,我想找到存在于多个类别 中的产品。
论证product_cat
不是WP_Query
的原生(至少我可以找到),所以我假设这是Woocommerce定制的东西。通过他们的文档,我找不到任何允许我按类别ID过滤的内容,也没有使用AND条件进行过滤。
使用cat
,tax_query
和category__and
的数组未产生任何结果。基本上,我想查询类别ID 102和115中存在的所有产品。如果我必须使用slug,我确信有一种方法可以根据我的ID获取该信息,但我会喜欢避免2个查询按多个类别进行过滤。
有谁知道如何做到这一点?
更新:我了解到在product_cat
参数中用逗号分隔类别slugs会产生“OR”效果,所以它会合并两者的不同产品,但这不是我在找什么。所以,例如:
'product_cat' => 'category-slug1, category-slug2'
总共将返回两个类别的产品,但我仍在寻找一种方法来查找仅属于两个或多个类别的不同产品。
答案 0 :(得分:28)
$args = array(
'posts_per_page' => -1,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'category-slug1'
),
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => 'category-slug2'
)
),
'post_type' => 'product',
'orderby' => 'title',
);
$the_query = new WP_Query( $args );
这利用了tax_query
参数,包括relation => 'AND'
,以确保产品属于两种类别。
希望这可以帮助将来的某个人。
我也无法弄清楚如何传递一个ID,而不是一个slug(虽然我确定有一种方法),但这里是根据ID检索slug的功能:
$terms = get_term($YOURID, 'product_cat');
$theslug = $terms->slug;
答案 1 :(得分:11)
要按category_ID查询,这对我有用。
// First obtain term id:
//...
$all_categories = get_categories( $args );
$cat_ids = array();
foreach ($all_categories as $cat)
{
array_push($cat_ids, $cat->term_id);
}
//Now use ids from array:
$args = array(
'posts_per_page' => -1,
'post_type' => 'product',
'tax_query' => array(
array(
'taxonomy' => 'product_cat',
'field' => 'id',
'terms' => $cat_ids
)
)
);
答案 2 :(得分:6)
来自WP_Query
for Category Parameters上的WordPress codex:
相当于 OR
$args = array( 'product_cat' => 'category-slug1,category-slug2' ) );
相当于 AND
$args = array( 'product_cat' => 'category-slug1+category-slug2' );
e.g。
$query = new WP_Query( $args );
答案 3 :(得分:1)
在“tax_query”内部&#39;数组的数组你可以指定一个&#39;运算符&#39;要对查询执行。您可以使用&#39; AND&#39;来实现您想要的效果。操作
$args = array(
'posts_per_page' => -1,
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'category-slug1', 'category-slug2' )
'operator => 'AND',
),
),
'post_type' => 'product',
'orderby' => 'title',
);
$the_query = new WP_Query( $args );
此查询选择的所有产品都与提供的&#39;条款相匹配。有关详细信息,请参阅此链接:https://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters
如果链接中断,请输入相关信息:
operator(string) - 要测试的运算符。可能的值包括&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;并且“不存在”#39;默认值为&#39; IN&#39;。