首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WP_Query:过滤器tax_query或meta_query

WP_Query:过滤器tax_query或meta_query
EN

Stack Overflow用户
提问于 2016-06-10 03:41:15
回答 2查看 3.1K关注 0票数 2

如何组合tax_query和meta_query的结果?

例: tax_query结果到: Post1,Post2。

meta_query结果为: Post3。

我想结合这两个查询的结果。这是我的部分代码:

代码语言:javascript
复制
'tax_query' => array(
     'relation' => 'AND',
     array(
         'taxonomy' => 'tax1',
         'field'    => 'term_id',
         'terms'    => array(1,2,3),
     ),
     array(
         'taxonomy' => 'tax2',
         'field'    => 'term_id',
         'terms'    => array(1,2,3),
     ),
 ),
 'meta_query' => array(
     array(
         'key'     => 'meta1',
         'value'   => '1',
         'compare' => '=',
      ), 
 ),

这里也提出了同样的问题,但没有得到回答。所以我要重新打开它。谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-15 06:35:25

听起来,您希望它表现得像一个“or”,其中返回一个与tax_querymeta_query匹配的帖子。

不幸的是,使用查询是不可能的。

您要么需要编写一个自定义数据库调用,要么只需要单独查询它们并在PHP上进行检查(如果您知道结果相对较少的话,这是可以的,但请注意,这不一定会扩展到一个大型站点)。

票数 2
EN

Stack Overflow用户

发布于 2017-12-14 19:24:44

实现这种查询的唯一方法是使用$wpdb全局语句和SQL语句对数据库创建自定义查询。我想应该是这样的:

代码语言:javascript
复制
global $wpdb;
$querystr = 
"
SELECT * FROM $wpdb->posts
LEFT JOIN $wpdb->postmeta ON ($wpdb->posts.ID = $wpdb->postmeta.post_id)
LEFT JOIN $wpdb->term_relationships ON($wpdb->posts.ID = $wpdb->term_relationships.object_id)
LEFT JOIN $wpdb->term_taxonomy as term_taxonomy1 ON($wpdb->term_relationships.term_taxonomy_id = term_taxonomy1.term_taxonomy_id)
LEFT JOIN $wpdb->term_taxonomy as term_taxonomy2 ON($wpdb->term_relationships.term_taxonomy_id = term_taxonomy2.term_taxonomy_id)
LEFT JOIN $wpdb->terms as tax1_term1 ON(term_taxonomy1.term_id = tax1_term1.term_id)
LEFT JOIN $wpdb->terms as tax1_term2 ON(term_taxonomy1.term_id = tax1_term2.term_id)
LEFT JOIN $wpdb->terms as tax1_term3 ON(term_taxonomy1.term_id = tax1_term3.term_id)
LEFT JOIN $wpdb->terms as tax2_term1 ON(term_taxonomy2.term_id = tax2_term1.term_id)
LEFT JOIN $wpdb->terms as tax2_term2 ON(term_taxonomy2.term_id = tax2_term2.term_id)
LEFT JOIN $wpdb->terms as tax2_term3 ON(term_taxonomy2.term_id = tax2_term3.term_id)
WHERE 
(
    (
        (term_taxonomy1.taxonomy = 'tax1') 
        AND 
        (tax1_term1.term_id = 1 AND tax1_term2.term_id = 2 AND tax1_term3.term_id = 3)
    )
    OR
    (
        (term_taxonomy2.taxonomy = 'tax2') 
        AND 
        (tax2_term1.term_id = 1 AND tax2_term2.term_id = 2 AND tax2_term3.term_id = 3)
    )
)
OR
(
    $wpdb->postmeta.meta_key = 'meta1' AND $wpdb->postmeta.meta_value = '1'
)
ORDER BY $wpdb->postmeta.meta_value ASC
"
$pageposts = $wpdb->get_results($querystr, OBJECT);

然后,您可以像使用一个$pageposts循环一样在WP_Query上迭代。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37739507

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档