我创建了一个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。如果你能帮我完成这最后一步,那就太好了。提前谢谢。请原谅我试图解释我的整个经历,我只是想确保我做的事情是正确的。
最合适的回答,由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 );
我希望这对某人有所帮助。