Posts per page, reverse count

时间:2015-08-10 作者:Xriuk

假设我在我的博客上有10篇文章,每页最多7篇,这就是我得到的:

第1页(主页):7篇文章第2页:3篇文章,但我需要这个:

第1页(主页):3篇文章第2页:7篇文章我需要从最后一页开始发帖,你知道怎么做吗?

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

如果你不介意打电话的费用COUNT 为了首先获得帖子总数(你有一个动态首页,以帖子数量为基础,因此它不适用于简单的偏移量),我写了一些东西(时间很晚,我很累,所以可能有一些bug/可能不是正确的解决方案):

// This code can be placed in the \'functions.php\' file.
function wt_posts_clauses_hook( $clauses, $query ) {
    if ( $query->is_main_query() && $query->is_home() ) {
        global $wpdb;

        extract( $clauses );

        if ( ! empty( $groupby ) ) $groupby = \'GROUP BY \' . $groupby;

        $sql = "SELECT COUNT(ID) FROM $wpdb->posts $join WHERE 1=1 $where $groupby";
        $no_posts = $wpdb->get_var( $sql );
        $posts_per_page = get_option( \'posts_per_page\' );
        $extra = $no_posts % $posts_per_page;
        $paged = absint( $query->get( \'paged\' ) );

        if ( ! $paged ) $paged = 1;

        $from = ( $paged - 1 ) * $posts_per_page;
        $to = $posts_per_page;

        if ( $extra ) {
            if ( $paged < 2 ) {
                $from = 0;
                $to = $extra;
            } else {
                $from = $posts_per_page * ( $paged - 2 ) + $extra;
            }
        }           

        $clauses[\'limits\'] = "LIMIT {$from}, {$to}";
    }

    return $clauses;
}
add_filter( \'posts_clauses_request\', \'wt_posts_clauses_hook\', 99, 2 );
如果不想在每个列表页调用上运行缓存机制,可以通过读取found_posts 所有物如果它与缓存项不对应,只需删除缓存即可。当然,您首先必须修改上面的此函数,以便最初尝试并读取$no_posts 缓存中的值。如果没有,则运行$sql 使用相应的$no_posts 价值

结束

相关推荐

Custom posts - tag pagination

我使用以下代码输出属于tag:add_filter(\'pre_get_posts\', \'query_post_type\'); function query_post_type($query) { if(is_category() || is_tag() && empty( $query->query_vars[\'suppress_filters\'] ) ) { $post_type = get_query_var(\'pos