Wordpress query_posts由元查询排序

时间:2013-01-02 20:29:01

标签: wordpress posts

这应该很简单,但我无法确定正确语法的一个很好的例子来做到这一点。

我想通过meta_queries过滤我的帖子,但是按指定的meta_key排序。

当我按原样运行代码时会产生无限循环。我只包含问题代码,其他代码是query_post运行的基本循环代码。

此外,所有PHP变量都是正确的,不是问题。

        $args2 = array(
            'meta_key' => '_count-views_all',
            //'meta_value' => $id,
            'orderby' => 'meta_value_num',
            'order' => $sortOrder,
            'posts_per_page' => 9,
            'paged' => $paged,
            'meta_query' => array(  
                        'relation' => 'OR',
                        array(
                            'key' => 'contributorid1',
                            'value' => $id,
                            'compare' => '='
                            ),

                        array(
                            'key' => 'contributorid2',
                            'value' => $id,
                            'compare' => '='
                            )
                        )
        );
        $posts = query_posts($args2); 
    }

这是另一个完全没有交叉引用问题的查询。这两个在同一页面上运行,但它们嵌套在if else语句中

        $args1 = array(
            //'meta_key' => 'contributorid1',
            //'meta_value' => $id,
            'order' => $sortOrder,
            'orderby' => 'title',
            'posts_per_page' => 9,
            'paged' => $paged,
            'meta_query' => array(
                        'relation' => 'OR',
                        array(
                            'key' => 'contributorid1',
                            'value' => $id,
                            'compare' => '='
                            ),

                        array(
                            'key' => 'contributorid2',
                            'value' => $id,
                            'compare' => '='
                            )
                        )
        );
        $posts = query_posts($args1);

1 个答案:

答案 0 :(得分:1)

查询对我来说很合理。我认为这种方法遇到无限循环的唯一方法是,如果此查询在post循环中运行。当您按原样使用query_posts时,它将更改全局$ wp_query的状态,该状态用于主帖循环中的指针。

如果它在循环中不断触及query_posts,它将不断更改全局$ wp_query对象的状态,并将当前帖子的指针重置为该新查询的第一个帖子,这最终将创建无限循环。

如果在循环中使用此代码,我建议使用类似

的内容
$query = new WP_Query($args2);
if ($query->have_posts()) { ... etc; }

如果您需要在其中设置全局发布数据,请务必在使用完之后正确使用wp_setup_postdata$query->the_post()wp_reset_postdatawp_reset_query发布全球发布信息。