按发布年份筛选自定义帖子类型。我有这样的想法:
2015/2016年的过滤柱。
年份是用$重定向的链接,如\'?year=2015\'
和\'?year=2016\'
在自定义页面中,我有以下内容:
$year = isset($_GET[\'year\']) ? $_GET[\'year\'] : \'\';
if ($year == \'2015\') {
$the_query = new WP_Query(\'year=2015&post_type=events\');
} else {
$the_query = new WP_Query(\'post_type=events\');
}
但如果我点击2015年,我会重定向到404页。我试着这样提问
$the_query = new WP_Query(\'year=2015&post_type=events\');
它可以工作,但不能让它与GET一起工作,或者有更好的方法来做到这一点吗?(对不起我的英语)
还尝试了以下操作:
$year = isset($_GET[\'year\']) ? $_GET[\'year\'] : \'\';
$the_query = new WP_Query(\'year=\'. (int)$year .\'&post_type=events\');
这里的问题是,我2016年的帖子正在过滤,但如果我通过2015年,让Parameter im重定向到404页面。
最合适的回答,由SO网友:Robbert 整理而成
我建议挂入pre_get_posts() 函数,通过将此代码添加到函数中来更改查询。php文件:
<?php
function filter_by_date( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
if ( isset( $_GET[\'year\'] ) ) {
$query->set( \'year\', $_GET[\'year\'] );
$query->set( \'post_type\', \'events\' );
}
}
return $query;
}
add_action( \'pre_get_posts\', \'filter_by_date\' );
?>