按自定义帖子类型和自定义日期字段存档

时间:2015-11-05 作者:roshan

我创建了一个custom post type 调用\'events\'custom date field 调用\'event_date\' .

我可以使用this awesome plugin

这个插件允许我以以下格式创建存档列表url:www.example。com/2015/11/events/

到目前为止,一切都很顺利。

但我想创造archives by \'event_date\' 与通常的“按发布日期”不同,so对上述插件进行了一些更改,并能够按“event\\u date”创建存档列表。

当我点击链接www.example时,我无法查看帖子。com/2016/09/events/

现在,当我写这个问题时,月份是11月,所以对于11月的事件,它会返回正确的帖子。

我使用pre\\u get\\u post按“event\\u date”获取事件,但它仍按发布日期返回帖子。以下是我获取帖子的代码:

function custom_events_query( $query ) {

    if (  $query->is_main_query() && $query->is_archive && !is_admin()&& is_post_type_archive(\'events\') && $query->query_vars[\'m\']!=\'\') {

        $query->set( \'post_type\', \'events\' );
        $query->set( \'meta_key\', \'event_date\' );
        $query->set( \'orderby\', \'meta_value\' );
        $query->set( \'order\', \'ASC\' );
        $query->set( \'post_per_page\', 10 );
        unset($query->query_vars[\'year\']);
        unset($query->query_vars[\'monthnum\']);
        unset($query->query_vars[\'day\']);

        $meta_query = array(
            array(
                \'key\' => \'event_date\',
                \'value\' =>  array(date(\'Y-m-d\',strtotime($query->query_vars[\'m\'].\'01\')),date(\'Y-m-d\',strtotime($query->query_vars[\'m\'].\'31\'))) ,
                \'compare\' => \'>=\',
            )
        );

        $query->set( \'meta_query\', $meta_query );

    }

    return $query;
}
add_filter( \'pre_get_posts\', \'custom_events_query\' );
为什么它仍然在发布日期前返回帖子,而我已经

unset($query->query_vars[\'year\']); 
unset($query->query_vars[\'monthnum\']);
Here is a link 我在尝试打开时获得的输出:http://www.example.com/2016/08/events/

我最近开始使用wordpress,我不确定是否正确使用pre\\u get\\u post。如果你能帮我完成这最后一步,那就太好了。提前谢谢。请原谅我试图解释我的整个经历,我只是想确保我做的事情是正确的。

1 个回复
最合适的回答,由SO网友:roshan 整理而成

幸亏Milo 谢谢你帮我度过难关。这是对我有用的代码。

function custom_events_query( $query ) {

    if (  $query->is_main_query() && $query->is_archive && !is_admin()&& is_post_type_archive(\'events\') && $query->query_vars[\'m\']!=\'\') {

        $query->set( \'post_type\', \'events\' );
        $query->set( \'meta_key\', \'event_date\' );
        $query->set( \'orderby\', \'meta_value\' );
        $query->set( \'order\', \'DESC\' );
        $query->set( \'post_per_page\', 10 );
        unset($query->query_vars[\'year\']);
        unset($query->query_vars[\'monthnum\']);
        unset($query->query_vars[\'day\']);

        $meta_query = array(
            array(
                \'key\' => \'event_date\',
                \'value\' =>  array(date(\'Y-m-d\',strtotime($query->query_vars[\'m\'].\'01\')),date(\'Y-m-d\',strtotime($query->query_vars[\'m\'].\'31\'))) ,
                \'compare\' => \'BETWEEN\'
            )
        );
        unset($query->query_vars[\'m\']);
        $query->set( \'meta_query\', $meta_query );
    }

    return $query;
}
add_filter( \'pre_get_posts\', \'custom_events_query\' );
我所要做的就是取消设置query\\u vars[\'m\']。因为我需要它来构造我的meta\\u查询,所以我只有在使用完它之后(即之前)才取消设置它$query->set( \'meta_query\', $meta_query );

我希望这对某人有所帮助。

相关推荐

Only Showing Upcoming Events

在此页面的侧栏中:http://lifebridgecypress.org/our-people, 我有一个即将使用此代码的事件列表。。。<ul id=\"upcoming-events\"> <?php $latestPosts = new WP_Query(); $latestPosts->query(\'cat=3&showposts=10\'); ?> <?php while ($latestPos