Support » Fixing WordPress » Page navigation broken

  • Resolved miromiro

    (@miromiro)


    In Reading/options, I have set display pages to ’10’ – which works fine on Search returns, Archives, Category pages.

    On index.php I have used this snippet

    <?php query_posts('posts_per_page=2'); ?>

    To restrict the posts displayed on the homepage to 2 – works a treat. However, since implementing this, the previous_posts nav on the bottom of the homepage no longer works:

    <?php next_posts_link('&laquo; Older entries') ?>

    now points to the correct place, ie.,

    http://www.examplesite.com/blog/page/2/

    but serves up the index.php page again.

    Any help greatly appreciated.

Viewing 15 replies - 1 through 15 (of 19 total)
  • When you say it displays index.php again, I’m not sure what you mean.

    Is it only displaying two previous posts, as opposed to ten?

    If that’s the case, perhaps a conditional in index.php is in order, something along the lines of this:

    <?php if ( is_home() ) query_posts('posts_per_page=2'); else query_posts(); ?>

    Thanks fool4Christ,

    I meant that it goes to ../blog/page/2/ but it serves the current index.php. ie., the 2 most current posts – not the older posts you would expect to find on page 2.

    So, you could keep clicking the link, but would only ever remain on the ‘home’ page…

    And the conditional didn’t work – but thanks for the suggestion.

    Cheers

    Okay, I’m not out of ideas just yet.

    Try this, taking advantage of the WordPress template hierarchy:

    Create a home.php template file with the modified index.php code copied into it — the code to call the two most recent posts.

    In index.php, place the default post display code.

    This way, whenever the main page is displayed, home.php will be used. On paged displays, index.php should be used.

    Oh, forgot this. You can get more information on which templates are used when here:
    http://codex.wordpress.org/Template_Hierarchy

    Awesome – I’ll give it a go: thanks for the help.

    Cheers

    Nice idea, but no change…

    If it helps, full page source is here:

    http://pastebin.ca/699206

    Thanks again.

    Which file is that, home.php or index.php ?

    Try this conditional statement:

    <?php if ( is_home() && !is_paged() ) { query_posts('posts_per_page=2'); } ?>

    That should load the “limit to 2” bit only if you’re on the home page and not one of the pages of the “home archive.”

    Thanks for your patience, fool4Christ – it is the index.php.

    I tried the conditional and it worked in one sense, the nav now points to older posts. Problem though, instead of pointing to the 3rd oldest post (1 and 2 being on the front page), it points back to the 9th! How does that work?

    Cheers,

    Shoot. I didn’t think about that! Quite sorry. As I had it above, the conditional is loading every other page as normal — in other words, the second page will load the second ten pages. Only the first page’s display is affected, hence the problem.

    And indeed, using the two different templates I mentioned above would result in the same problem, unless some code was inserted into the index.php loop to instruct WordPress to recognize that the second page still needs to grab 8 posts into the most recent 10, rather than skipping to the 11th.

    Phew.

    I’m not entirely sure how that PHP would be constructed, so if someone else has any ideas, feel free to chime in! I’ll poke around and see what I can find, but it’s not a problem I’ve come across before and I’m by no means a PHP guru.

    Thank *you* for your patience with me, miromiro!

    Okay, miromiro, I found the solution! It’s as convoluted as can be, so please forgive that! I’ve used the code live on my blog just to make sure it works, and it does. The beauty of it is that it will work whether you have posts per page set to anything, not just 10, in the admin panel — I hope. 🙂

    Check it out and let me know how it works for you:
    http://pastebin.com/f318db5f3

    I tried to comment it as best I could.

    Wow! The generosity of the people in this forum is always amazing, but fool4Christ you have blown me away with your commitment to helping a brother out – thank you.

    Your solution works beautifully.

    One final question – and I am really not expecting any other help on this – what do I do about this snippet?

    `<?php while (have_posts()) : the_post();

    if ($i == 1) { ?>
    <img src=”<?php bloginfo(‘template_directory’);?>/images/fresh.gif” id=”fresh” alt=”Newest Post” title=”This post is guaranteed to be freshly published”/>
    <?php }
    ?>

    Wow! The generosity of the people in this forum is always amazing, but fool4Christ you have blown me away with your commitment to helping a brother out – thank you.

    Your solution works beautifully.

    One final question – and I am really not expecting any other help on this – what do I do about this snippet?

    `<?php while (have_posts()) : the_post();

    if ($i == 1) { ?>
    <img src=”<?php bloginfo(‘template_directory’);?>/images/fresh.gif” id=”fresh” alt=”Newest Post” title=”This post is guaranteed to be freshly published”/>
    <?php } ?>

    It is placing the fresh icon at the top of every page, not just next to the newest post.

    Thanks again for all your help.

    Try this:

    <?php while (have_posts()) : the_post();
    
    if ($i == 1 && is_home() ) { ?>
    <img src="<?php bloginfo('template_directory');?>/images/fresh.gif" id="fresh" alt="Newest Post" title="This post is guaranteed to be freshly published"/>
    <?php } ?>

    That should cause the image only to be called on the home page’s first post, I think.

    Thanks fool4Christ, but no change.

    I appreciate the effort, though 🙂

    Sorry about that, miromiro! Try giving this one a whirl:

    <?php while (have_posts()) : the_post();
    
    if ( is_home() ) {
    if ( $i == 1 ) { ?>
    <img src="<?php bloginfo('template_directory');?>/images/fresh.gif" id="fresh" alt="Newest Post" title="This post is guaranteed to be freshly published"/>
    <?php } } ?>

    I’m not for sure why the first example won’t work, but maybe this one will.

Viewing 15 replies - 1 through 15 (of 19 total)
  • The topic ‘Page navigation broken’ is closed to new replies.