My pagination is only linking to the same posts that are on my front page.

I have 3 posts on my front page, when I press next it goes to /page/2 but only shows the same 3 posts, with no previous button. The next button is still there, but still goes to page/1

Here is the full query.

<?php

            query_posts('post_type=post&posts_per_page=3');

            if ( have_posts() ) : while ( have_posts() ) : the_post();

            $category = choose_one_category(get_the_category());

            switch ($category){
                case "Festival News":
                    $left[] = $post;
                    break;
                case "Industry News":
                    $centre[] = $post;
                    break;
                case "Other":
                    $right[] = $post;
                    break;
            }


            endwhile; 
            ?>
            <div class="custom-pagination">

            <div ><?php previous_posts_link('&laquo; Previous') ?></div>

            <div ><?php next_posts_link('Next &raquo;') ?></div>
            </div>
            <?php endif;



            ?>
link|improve this question

74% accept rate
feedback

4 Answers

up vote 7 down vote accepted

Building off of what Rarst has said, I'm pretty sure the query string will retain 'paged' queries even if WP_Query strips it out as irrelevant. You could try replacing your query posts line with this:

global $query_string;
parse_str( $query_string, $my_query_array );
$paged = ( isset( $my_query_array['paged'] ) && !empty( $my_query_array['paged'] ) ) ? $my_query_array['paged'] : 1;
query_posts('post_type=post&posts_per_page=3&paged='.$paged);
link|improve this answer
YES!! now, any chance you could explain what is happening? So that I and others can understand it? Many thanks – Mild Fuzz Oct 6 '10 at 13:16
for example, can I use this with custom WP_Query objects? I have a few that are also not working. – Mild Fuzz Oct 6 '10 at 13:18
feedback

Pagination functions are meant to be used with main Loop. They are relying on global variables $paged and $wp_query, which are not set by your custom loop.

link|improve this answer
how can I correct this? – Mild Fuzz Oct 6 '10 at 11:55
If this is main content/loop of your page you need to work with query_posts(). Otherwise you might need to code your own pagination, at least I don't know how to make native pagination functions work with secondary loop. – Rarst Oct 6 '10 at 11:58
I have ammended the above loop. I get a next button, but the posts are those from the front page. – Mild Fuzz Oct 6 '10 at 12:22
Why shouldn't they be? You are not specifying anything in query except post type and quantity. Also see Preserving original query – Rarst Oct 6 '10 at 12:53
feedback

If you stumble upon this one, try the following: "Easy Pagination Deamon". Install, activate, use the template tag inside your template...

The link to the stylesheet can be found inside my gists or below the top plugin comment.

link|improve this answer
feedback

Is this on your home page? I had this problem as well and as a workaround, I simply made the link on the first page point to http://www.yoursite.com/category/page/2/ so it skips the first set of values for page one. From there on, the pagination links worked correctly. Here is an example.

link|improve this answer
just a little bit hacky – Mild Fuzz Oct 6 '10 at 14:40
agreed but in terms of time, it can be a life saver. Last month, I had to build 14 WP sites in 2 weeks and unfortunately, had to resort to hacks for time's sake. – moettinger Oct 6 '10 at 14:44
feedback

Your Answer

 
or
required, but never shown

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