我正在制作一个小小的wordpress爱好项目,我遇到了一些障碍。我已经实现了WooCommerce,并且正在为我的数据使用类别和标签。
我有一些我知道的相关条目因此,例如,数据的模型如下:
汽车#1: Category =>四门轿车 标签=>沃尔沃
第2车: Category =>四门轿车 标签=>沃尔沃
第3车: Category =>四门轿车 标签=> BMW
我正在尝试过滤这些WooCommerce产品,以确保标签和类别都匹配,所以在这种情况下,Car#1与Car#2相关,而Car#3是孤儿。
获取相关产品时生成的当前查询如下:
SELECT * FROM wp_posts p
INNER JOIN wp_postmeta pm ON ( pm.post_id = p.ID AND pm.meta_key='_visibility' )
INNER JOIN wp_term_relationships tr ON (p.ID = tr.object_id)
INNER JOIN wp_term_taxonomy tt ON(tr.term_taxonomy_id = tt.term_taxonomy_id)
INNER JOIN wp_terms t ON (t.term_id = tt.term_id)
WHERE (( tt.taxonomy = 'product_cat' AND t.term_id IN ( 14 )))
OR (( tt.taxonomy = 'product_tag' AND t.term_id IN ( 44) ));
当我使用OR时,查询给出了正确的结果,但是对于更多数据,我得到的结果只满足一个不能正常工作的标准。我认为问题是每个帖子只提取一个分类行,所以当我在上面的查询中使用AND(在where条件中)而不是OR时,它不起作用。
有没有人知道这方面的解决方案或遇到过类似的问题?或者,我应该有更好的方法来构建产品吗?
谢谢!
答案 0 :(得分:2)
将WP_Query
与tax_query
一起使用,并在那里定义AND
关系以获取正确的查询。例如,在您的情况下,这样的事情可能会起作用;
$args = array(
'post_type' => 'product',
'tax_query' => array(
'relation' => 'AND',
array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'volvo' ),
),
array(
'taxonomy' => 'product_tag',
'field' => 'slug',
'terms' => array( 'sedan' ),
),
),
);
$query = new WP_Query( $args );
有关详细信息,请参阅WordPress Codex on WP_Query。祝你好运!