按标签和类别划分的Wordpress过滤产品

时间:2016-10-29 19:46:22

标签: php mysql wordpress

我正在制作一个小小的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时,它不起作用。

有没有人知道这方面的解决方案或遇到过类似的问题?或者,我应该有更好的方法来构建产品吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

WP_Querytax_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。祝你好运!