存在偏移量时,如何对WP_Query结果进行分页? [英] How can I paginate WP_Query results when there's an offset?

查看:73
本文介绍了存在偏移量时,如何对WP_Query结果进行分页?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

编辑:这是我要分页的当前代码。它创建一个自定义查询,不包括最新帖子以及一个类别中的所有帖子。分页在大多数情况下都可以正常工作,但是问题是分页列表中的最后一个链接将我带到了空白页。

This is the current code that I'm trying to paginate. It creates a custom query that excludes the latest post, as well as all posts from one category. Pagination works fine for the most part, but the problem is that the final link in the pagination list takes me to a blank page.

<section class="card-grid card-grid--push">
    <main class="container container--wide">

    <?php

        $current_page = get_query_var('paged');
        $current_page = max( 1, $current_page );
        $per_page = 3;
        $offset = ( $current_page - 1 ) * $per_page + 1;

        $post_list = new WP_Query(array(
            'cat'            => -15,
            'posts_per_page' => $per_page,
            'paged'          => $current_page,
            'offset'         => $offset, 
            'orderby'        => 'date', 
            'order'          => 'DESC',  
        ));

        if ( $post_list->have_posts() ):
            while ( $post_list->have_posts() ):
                $post_list->the_post();

    ?>

    <a href="<?php the_permalink(); ?>" <?php post_class('card'); ?>>
        <article class="card__content">
            <?php the_post_thumbnail('th-card'); ?>
            <div class="card__head">
                <span class="category">
                    <?php $category = get_the_category(); echo $category[0]->cat_name; ?>
                </span>
                <h2 class="card__title"><?php the_title(); ?></h2>
            </div>
        </article>
    </a>

    <?php endwhile; ?>

    <div class="pagination">

        <?php 
            echo paginate_links( array(
                'total'   => $post_list->max_num_pages,
                'current' => $current_page,
                'type'          => 'list',
                'prev_text' => '«',
                'next_text' => '»'
            ) );
        ?>

    </div>

  <?php  
        endif;
        wp_reset_postdata();
    ?>

</main>

推荐答案

在这里,经过充分测试并可以正常工作

$current_page = get_query_var('paged');
$current_page = max( 1, $current_page );

$per_page = 12;
$offset_start = 1;
$offset = ( $current_page - 1 ) * $per_page + $offset_start;

$post_list = new WP_Query(array(
    'cat'            => -15,
    'posts_per_page' => $per_page,
    'paged'          => $current_page,
    'offset'         => $offset, // Starts with the second most recent post.
    'orderby'        => 'date',  // Makes sure the posts are sorted by date.
    'order'          => 'DESC',  // And that the most recent ones come first.
));

// Manually count the number of pages, because we used a custom OFFSET (i.e.
// other than 0), so we can't simply use $post_list->max_num_pages or even
// $post_list->found_posts without extra work/calculation.
$total_rows = max( 0, $post_list->found_posts - $offset_start );
$total_pages = ceil( $total_rows / $per_page );

if ( $post_list->have_posts() ):
    while ( $post_list->have_posts() ):
        $post_list->the_post();


        // loop output here
    endwhile;

    echo paginate_links( array(
        'total'   => $total_pages,
        'current' => $current_page,
    ) );
endif;
wp_reset_postdata();

PS:使用制表符重新缩进了代码。

PS: The code was re-indented using tabs.

这篇关于存在偏移量时,如何对WP_Query结果进行分页?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆