Today I had a real problem with a WordPress website that uses multiple wp_query calls on the home page. The issue was that I could not use the next_posts_link() function properly, since WordPress ignores the “offset” parameter when creating paginated pages.

The solution I used was found here on the WordPress Codex.

Here is the code:

 1) ? ($onum) : 0;

query_posts("posts_per_page=$qry[total]&paged=$paged&showposts=$qry[1]&offset=$offset");
if (have_posts()) :
	while (have_posts()) : the_post();

		// Loop stuff

	endwhile;
endif;

// Reuse the offset variable (rather then creating a new one), setting to a new value (plus any additional offset)
// Total in first query, plus any offset, if there is one
$offset = $qry[1] + (($paged > 1) ? $onum : 0);

query_posts("posts_per_page=$qry[total]&offset=$offset&showposts=$qry[2]");
if (have_posts()) :
	while (have_posts()) : the_post();

		// Loop stuff

	endwhile;
endif;

// Again just reusing the variable and adding offset (if page is more then 1)
// First posts total, plus second posts total, plus offset (if there is one)..
$offset = ($qry[1] + $qry[2]) + (($paged > 1) ? $onum : 0);

query_posts("posts_per_page=$qry[total]&offset=$offset&showposts=$qry[3]");
if (have_posts()) :
	while (have_posts()) : the_post();

		// Loop stuff

	endwhile;
endif;

// Unset the variables (we've finished with them, no reason to hold onto them)
unset($qry,$offset,$onum);
?>

Can you think of an easier way to do this?

2 Comments

  1. Démian on May 13, 2011 at 7:22 pm

    Hi,

    Thank you for this issue. It’s work fine for me on index.php but not for the archives pages: tags, search, category…

    Do you have a solution?

    Many thanks in advance,
    Dem.



  2. toby on May 14, 2011 at 2:33 am

    I can’t think of any reason why it wouldn’t work on categories… Please let me know if you figure this out!