Wordpress WP_Query with& meta_query中的运算符不起作用。如何组合查询?

时间:2013-06-07 12:58:25

标签: wordpress-theming wordpress

我正在尝试在首页网格上显示一些帖子。为此我需要组合2个查询。我想要展示

a)所有'post_type' => 'project'

的帖子

b)所有'post_type' => 'post'的帖子'category__not_in' => array(1,4,5,6,8),且meta_key 'show_in_grid'设置为1

它们在一个list中随机排序显示。

WP_Query的Wordpress文档中,它表示您可以这样做:

$query = new WP_Query( 'meta_value=blue&post_type=page' );

但这似乎没有按预期工作。

如果我这样做:

'post_type=post&meta_key=show_in_grid&meta_value=1'

它只是忽略了键是否设置为1。

如果我这样做:

'post_type' => 'post',
'meta_query' => array(
             array( 'key' => 'show_in_grid',              
                  'value' => '1',
                'compare' => '=')),

然后,一切都按预期工作。

这是文档中的错误吗?如何将2个不同的查询与逻辑OR相结合?我看到使用'relation'对tax_query有类似的东西。




答案

好的,我感谢这里的评论:http://wordpress.org/support/topic/multiple-queries-compiling-into-one-loop?replies=5#post-1929074

最终解决方案是:

<?php
            // first query
            $blogposts = get_posts(array(
                    'category' => 5,
                    'post_type' => 'post',
                    'meta_query' => array(
                            array('key' => 'show_in_grid',
                                'value' => '1',
                                'compare' => '=')),
                    'post_status' => 'publish',
                    'posts_per_page' => 1000
                    ));
            // second query
            $projects = get_posts(array(
                    'post_type' => 'project',
                    'post_status' => 'publish',
                    'posts_per_page' => 1000
                    ));

            $mergedposts = array_merge( $blogposts, $projects ); //combine queries

            $postids = array();
            foreach( $mergedposts as $item ) {
            $postids[]=$item->ID; //create a new query only of the post ids
            }

            $uniqueposts = array_unique($postids); //remove duplicate post ids

            $args = array(
                    'post_type' => array('project','post'),
                    'post__in' => $uniqueposts,
                    'orderby' => 'rand'
                    );

            $loop = new WP_Query($args);

            while ( $loop->have_posts() ) : $loop->the_post();?>

由于某些奇怪的原因,必须在原始的2个查询中指定'post_type',否则最终查询将无效!?

希望这有助于某人...... :)

0 个答案:

没有答案