How can I paginate WP_Query results when there's an offset?

后端 未结 1 1199
栀梦
栀梦 2021-01-13 18:41

EDIT: 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 work

1条回答
  •  暖寄归人
    2021-01-13 19:12

    [EDIT] Here it is, fully tested and working:

    $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: The code was re-indented using tabs.

    0 讨论(0)
提交回复
热议问题