我正在尝试解决如何在动态筛选帖子时解决分页问题。
我在分类档案上方有一个下拉框,允许用户根据自定义字段对帖子进行排序或筛选。
这些帖子在第一页上过滤得很好。我的问题在我从第二个或更深的页面过滤帖子时就出现了,因为过滤掉它们也会减少现有页面的数量。这会为我返回404错误。
我想知道如何将此修改为check if the page exists, 如果不是。。。返回第一页。
$paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1;
按要求更新代码:
// ADD SORT QUERY VAR
add_action( \'init\', \'sort_rewrite_rules\' );
function sort_rewrite_rules() {
// SORT QUERY VAR
add_rewrite_tag( \'%sort%\', \'([^/]+)\' );
}
add_action( \'pre_get_posts\', \'filter_pre_get_posts\',11 );
function filter_pre_get_posts( $query ) {
// DON\'T AFFECT WP-ADMIN SCREENS
if ( is_admin() )
return;
// SORT ADS FROM THE MAIN QUERY
$paged = ( get_query_var(\'paged\') ) ? get_query_var(\'paged\') : 1;
$sort = get_query_var( \'sort\' );
if ( $query->is_main_query() && $sort ) {
//EXCLUDE EXPIRED POSTS
if ( \'expired\' == $sort ) {
$today = date(\'Y-m-d H:i:s\');
$metaquery = array(
array(
\'key\' => \'expire_date\',
\'value\' => $today,
\'type\' => \'DATETIME\',
\'compare\' => \'>\'
)
);
$query->set( \'meta_query\', $metaquery );
$query->set( \'paged\', $paged );
}
}
}
<div id="sort">
<form action="" method="GET">
<select name="sort" id="sort-dropdown">
<option value="expired" <?php selected( get_query_var( \'sort\' ), \'expired\' ); ?>><?php _e( \'Exclude Expired Posts\', \'txt\' ); ?></option>
</select>
<button type="submit" id="sort-submit">Sort</button>
</form>
</div>
最合适的回答,由SO网友:Steven Jones 整理而成
为了保持一致,您可能应该在所有场景中搜索后将用户返回到结果的第一页。
如果确实需要检查,您可以使用以下选项:
$wp_query->max_num_pages;
因此,如果只有2页,而您位于第3页,则需要重定向到开头。