• Resolved morgyface

    (@morgyface)


    Hello,

    I have created a page called “home”. I have set that page as my front page.

    I have then edited page.php in my theme so that it basically asks which page it is on and then runs the loop with a $wp_query in front of it so that the correct posts are dished out and paginated. This works perfectly on every page apart from the home page.

    The home page dishes out the first page of posts perfectly but when clicking on next_posts_link the same posts are repeated again and again.

    I have spent the last 3 hours trying to find a solution but I have not found one. If you can help me I’ll buy you a pint and a bag of crisps.

    Here is the code I am using within page.php

    <?php if ( is_page('home') ) { ?>
    <?php
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query();
    $wp_query->query('cat=-6&showposts=6'.'&paged='.$paged);
    ?>
    <?php get_template_part( 'loop', 'index' );?>
    <?php } ?>

    Please help me, you’re my only hope.

    Regards, Morgyface. x

Viewing 14 replies - 16 through 29 (of 29 total)
  • Assuming by is_page(home'), you’re referring to your site’s front page, try replacing it with is_front_page().

    Thread Starter morgyface

    (@morgyface)

    Hi esmi, that’s how it was originally set up, I think I changed it yesterday whilst trying to find resolution, I just changed it back and tested it to be sure but the outcome is the same.

    Any other ideas?

    Can you post the whole page if it’s not too long?

    Thread Starter morgyface

    (@morgyface)

    I can indeed.

    <?php
    get_header(); ?>
    <div class="content">
    <?php if ( have_posts() ) while ( have_posts() ) : the_post(); ?>
    
    <?php
    if ( is_front_page() ) { soliloquy_slider( '152' ); } elseif ( is_page( 'music' ) ) { soliloquy_slider( '156' );
    } else ( the_title ('<div class="titlebar"><h1>', '</h1></div>') )
    ?>	
    
    <?php
    /* If is contact page deliver body text div and the content.
     */
     if ( is_page('contact') ) { ?>
     <div class="body-text">
     <?php the_content(); ?>
     </div>
    <?php } ?>	
    
    <?php endwhile; ?>
    
    <?php
    /* If the home page run the loop to output posts.
     * Though exclude Music posts (category id 6)
     */
     if ( is_front_page() ) { ?>
    
    <?php
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query();
    $wp_query->query('cat=-6&showposts=6'.'&paged='.$paged);
    ?>
    
    <?php
    /* Run the loop to output the posts.
     * If you want to overload this in a child theme then include a file
     * called loop-index.php and that will be used instead.
     */
     get_template_part( 'loop', 'index' );
    ?>
    
    <?php } ?>
    
    <?php
    /* If the music page run the loop to output music posts.
     */
     if ( is_page('music') ) { ?>
    <?php
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query();
    $wp_query->query('cat=6&showposts=6'.'&paged='.$paged);
    ?>
    
    <?php
    /* Run the loop to output the posts.*/
     get_template_part( 'loop', 'index' );
    ?>
    <?php } ?>	
    
    <?php
    /* If the articles page run the loop to output article posts.
     */
     if ( is_page('articles') ) { ?>
    <?php
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query();
    $wp_query->query('cat=7&showposts=6'.'&paged='.$paged);
    ?>
    
    <?php
    /* Run the loop to output the posts */
     get_template_part( 'loop', 'index' );
    ?>
    <?php } ?>	
    
    <div class="clr"><hr /></div>
    </div>
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    I;m not 100% sure of what you’re trying to do but the logic is all over the place in that code. Try something like:

    <?php
    get_header();
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    ?>
    
    <?php
    // set up custom queries
     if ( is_front_page() ) query_posts('cat=-6&showposts=6'.'&paged='.$paged);
     elseif( is_page('music') ) query_posts('cat=6&showposts=6'.'&paged='.$paged);
    elseif( is_page('articles') ) query_posts('cat=7&showposts=6'.'&paged='.$paged);
    ?>
    
    <div class="content">
    <?php if ( is_front_page() ) soliloquy_slider( '152' );
    elseif ( is_page( 'music' ) ) soliloquy_slider( '156' );?>	
    
    <?php if ( !is_page('music') && !is_page('articles') && !is_front_page() ) :
    // This is a standard static page
    the_title ('<div class="titlebar"><h1>', '</h1></div>')
    <div class="body-text">
    <?php the_content(); ?>
    </div>
    
    else:
    // This is a page of posts
    get_template_part( 'loop', 'index' );
    endif; ?>
    
    <div class="clr"><hr /></div>
    </div>
    
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>
    Thread Starter morgyface

    (@morgyface)

    Thank you so much esmi. When pasted into my HTML editor it highlighted some syntax issues so, in the interests of testing, I simplified it to:

    <?php
    get_header();
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    ?>
    
    <?php
    // set up custom queries
     if ( is_front_page() ) query_posts('cat=-6&showposts=6'.'&paged='.$paged);
     elseif( is_page('music') ) query_posts('cat=6&showposts=6'.'&paged='.$paged);
    elseif( is_page('articles') ) query_posts('cat=7&showposts=6'.'&paged='.$paged);
    ?>
    
    <div class="content">
    <?php if ( is_front_page() ) soliloquy_slider( '152' );
    elseif ( is_page( 'music' ) ) soliloquy_slider( '156' );
    else ( get_template_part( 'loop', 'index' ) );
    ?>
    
    <div class="clr"><hr /></div>
    </div>

    The code is much simpler and more logical but, guess what, the problem continues. It displays the first 6 posts, yet when clicking on “Older posts” it repeats the first 6. The music page works as it should!

    How frustrating!

    That code won’t work full stop on some pages.

    <?php if ( is_front_page() ) soliloquy_slider( '152' );
    elseif ( is_page( 'music' ) ) soliloquy_slider( '156' );
    else ( get_template_part( 'loop', 'index' ) );
    ?>

    will cause the front page & the music page to show nothing but a slider.

    Thread Starter morgyface

    (@morgyface)

    I thought the same thing but upon upload it DID work (apart from the ongoing issue).

    try to use pre_get_posts in functions.php instead of query_posts()
    the last one is not recommended in this case.
    examples here
    https://codex.www.ads-software.com/Plugin_API/Action_Reference/pre_get_posts

    Moderator keesiemeijer

    (@keesiemeijer)

    If this is a “Page” template pre_get_posts will not work to alter the query.
    https://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts-and-pre-get-posts

    Use ‘page’ on a static front page and ‘paged’ on all other pages to get the query var.

    change this:

    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;

    to this (for static front page and other pages):

    if ( get_query_var('paged') ) { $paged = get_query_var('paged'); }
    elseif ( get_query_var('page') ) { $paged = get_query_var('page'); }
    else { $paged = 1; }

    this is a “Page” template

    Ah, had lost it, sorry.

    Thread Starter morgyface

    (@morgyface)

    I want to thank @esmi for her persistence in trying to resolve this and @keesiemeijer for the final tip that nailed it.

    Although I’ve not yet modified the generic page.php template yet, the following code works perfectly, with the next 6 posts appearing as they should. It was a huge relief. I wish I could buy beer for everyone!

    <?php
    get_header();
    if ( get_query_var('paged') ) { $paged = get_query_var('paged'); }
    elseif ( get_query_var('page') ) { $paged = get_query_var('page'); }
    else { $paged = 1; }
    ?>
    <?php query_posts('cat=-6&showposts=6'.'&paged='.$paged); ?>
    <?php get_template_part( 'loop', 'index' );?>
    <?php get_sidebar(); ?>
    <?php get_footer(); ?>

    Thanks again folks x

    Hi all, just wanted to say I had the same problem and from everyone’s help, Morgyface’s final post on this thread helped me out.

    Thanks!

    HI all i was also stuck on the same issue but this Post really helped me resolve it…

    SO thanks for posting….

Viewing 14 replies - 16 through 29 (of 29 total)
  • The topic ‘front-page wp-query pagination issue, repeating posts next_posts_link HELP.’ is closed to new replies.