0

In the index.php page, I need to skip 5 posts (the last 5 posts in the blog).

I use the WP-Paginate plugin, but all pages show the same. I'm using offset=5, this is my code:

<?php  $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;?>
<?php   $additional_loop = new WP_Query("offset=5&paged=".$paged);  
        if ($additional_loop->have_posts()) :

        while ($additional_loop->have_posts()) : $additional_loop->the_post();
        the_title();?><br/>
        <?php the_content();?>
        <?php endwhile;endif;?>
        <?php if(function_exists('wp_paginate')) {
    wp_paginate('range=4&anchor=2&nextpage=Next&previouspage=Previous');
} ?>
2
  • Give this one a try: github.com/franz-josef-kaiser/Easy-Pagination-Deamon It can be used as plugin, but is meant to show you how pagination can be done in wp.
    – kaiser
    Commented Mar 28, 2011 at 5:45
  • 1
    You cannot use an offset with the paged parameter, the paging system sets the offset, when you set an offset you mess up the paging. If you use an offset you must create your own paging system(ie. build paging links yourself).
    – t31os
    Commented Mar 28, 2011 at 10:56

1 Answer 1

1

You can specify either paged for simple pagination, or offset if you want to do something special. Calculating the offset yourself is easy: just multiply the current page number (minus two) with the number of posts per page, and add your start offset:

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$posts_per_page = get_option( 'posts_per_page' ),
$additional_loop = new WP_Query( array(
    'offset' => ( $paged - 2 ) * $posts_per_page + 5,
) );

I see you use wp_paginate(), but this function does not know you are using an additional query and will read the global $wp_query object to get the current page and total number of pages, unless you pass these values yourself:

wp_paginate( array(
    'range' => 4,
    'anchor' => 2,
    'nextpage' => 'Next',
    'previouspage' => 'Previous',
    'page' => $paged,
    'pages' => intval( ceil( $additional_loop->found_posts / $posts_per_page ) ),
) );

This is an additional loop, so there still is a "normal" loop on this page? Watch out that this will not confuse pagination, because WordPress will also try to paginate that loop and return a 404 if it is exhausted - which may be before you reach the last page. Try to do pagination only in the main loop, with the pre_get_posts hook.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.