如何更改基于帖子元的主查询

时间:2017-08-08 作者:Graham

我想根据返回帖子中的meta更改查询的排序顺序。具体来说,帖子是带有事件日期的事件,我会将其筛选为未来或过去。如果所有的事件都是过去的,我希望最新的事件先发生,如果所有的事情都是在未来,那么下一个要发生的事情必须先发生。我在pre-get-posts功能中尝试了各种方法,如:

function resort($query){
    if($query->is_main_query() && is_tax(\'event-category\'){
        if($query->have_posts()){
            // do something based on the first post
            wp_reset_query();
        }
    }
}
函数位于函数中。php和正在启动,但它没有通过have_posts(), 尽管主查询返回了很多帖子。我错过了什么?

触发查询的是什么,不能在哪里触发?我试过了query_posts() 失败了

1 个回复
SO网友:Graham

终于找到了。此代码位于函数中。php:

function set_order_by_last_date($query){

$query->set( \'orderby\', \'eventstart\');
$query->set( \'order\', \'DESC\' );
$query->get_posts();
if ($query->have_posts()){
    if ( eo_get_the_end(\'Ymd\',$query->posts[0]->ID,$query->posts[0]->occurrence_id) > date(\'Ymd\') ){
        $query->set( \'event_end_after\', \'today\' );
        $query->set( \'orderby\', \'eventstart\');
        $query->set( \'order\', \'ASC\' );
    } else {
        $query->set( \'event_end_before\', \'today\' );
        $query->set( \'orderby\', \'eventstart\');
        $query->set( \'order\', \'DESC\' );
    }
}
return $query->query_vars;
}
从模板文件调用,使用:

<?php query_posts(set_order_by_last_date(clone $wp_query));?>
vars和eo\\uu功能来自优秀的活动组织者插件。谢谢杰克·约翰逊的指点。

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post