WordPress - 使用WP_Query的SQL请求,在post_type和taxonomy之间使用OR

时间:2015-10-06 12:17:49

标签: wordpress

我的问题非常简单,我试图获得两个投资组合帖子(来自插件)和有“投资组合”类别的文章(自己制作)。

$args = array(
    'post_type' => 'portfolio',
    'tax_query' => array(
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => 'portfolio',
        )
    )
);

$query = new WP_Query($args);

看起来post_type和tax_query之间的关系是AND,我需要一个OR,我该怎么做?

我试过遵循官方文档,但我被卡住了。 (https://codex.wordpress.org/Class_Reference/WP_Query) 谢谢你的帮助。

2 个答案:

答案 0 :(得分:0)

以下是关系' OR'

的示例
$args = array(
    'post_type' => 'portfolio',
    'meta_query' => array(
        'relation' => 'OR', /* <-- here */
        array(
            'key' => 'color',
            'value' => 'blue',
            'compare' => 'NOT LIKE'
        ),
        array(
            'key' => 'price',
            'value' => array( 20, 100 ),
            'type' => 'numeric',
            'compare' => 'BETWEEN'
        )
    )
);
$query = new WP_Query( $args );

答案 1 :(得分:0)

我还没有找到只使用一个查询的解决方案。 (无法将AND更改为OR)。

所以我提出了两个问题:

$query1 = new WP_Query(array('post_type' => 'portfolio'));
$query2 = new WP_Query(array(
    'tax_query' => array(
        array(
            'taxonomy' => 'category',
            'field'    => 'slug',
            'terms'    => 'portfolio',
        )
    )));

$query = merge_WP_queries($query1, $query2);

function merge_WP_queries(WP_Query $query1, WP_Query $query2){
    $wp_query_returned = new WP_Query();
    $wp_query_returned->posts = array_merge( $query1->posts, $query2->posts );

    //populate post_count count for the loop to work correctly
    $wp_query_returned->post_count = $query1->post_count + $query2->post_count;

    return $wp_query_returned;
}

它可以正常工作,即使它不是我想要使用的。