使用PRE_GET_POST过滤掉帖子、分页问题

时间:2014-09-05 作者:ovidiubica

我正在尝试解决如何在动态筛选帖子时解决分页问题。

我在分类档案上方有一个下拉框,允许用户根据自定义字段对帖子进行排序或筛选。

这些帖子在第一页上过滤得很好。我的问题在我从第二个或更深的页面过滤帖子时就出现了,因为过滤掉它们也会减少现有页面的数量。这会为我返回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>

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

为了保持一致,您可能应该在所有场景中搜索后将用户返回到结果的第一页。

如果确实需要检查,您可以使用以下选项:

$wp_query->max_num_pages;
因此,如果只有2页,而您位于第3页,则需要重定向到开头。

结束

相关推荐

Custom template pagination

我有一个自定义的帖子类型“新闻”。我创建了id为55的“News”页面和一个自定义模板文件。我想实现分页。问题是,当我访问设置了页码的新闻时,会出现错误“404未找到”。URL类似于“/新闻/页面/2/”。我使用paginate_links 函数以显示分页。如何显示正确的页面?