Pagination shows same contents all pages

Here is my loop

        $my_query = new WP_Query(array(
                'cat' => -399,
                'posts_per_page' => 6,
                'offset' => 5,
                'paged' => (get_query_var('paged')) ? get_query_var('paged') : 1
        ));
        if ( $my_query->have_posts() ) : while ( $my_query->have_posts() ) : $my_query->the_post(); 
            $imgurl = wp_get_attachment_url( get_post_thumbnail_id($post->ID) );
            $finalurl = get_stylesheet_directory_uri(). "/functions/thumb.php?w=180&h=180&a=t&src=".$imgurl;
            $date = get_the_date(); 
            $id = $post->ID;
        ?>
        .... loop contents ....

        <?php $finalurl = "";
        endwhile;
        else: ?>
        <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
        <?php endif; wp_reset_query();
        $id = ""; wp_pagenavi();

Pagination shows same content in all pages. I need your suggestion.

Related posts

3 comments

  1. Try changing $my_query to $wp_query to see if that fixes the issue. I found that when you rename the query it messes with the pagination.

    Also you should move the reset query after the pagination. Here’s a loop I’ve verified works with pagination:

    $args = array(
        'posts_per_page' => 10,
        'post_type'      => 'post',
        'paged'          => get_query_var( 'paged' ),
    );
    $wp_query = new WP_Query( $args );
    while ( $wp_query->have_posts() ) : $wp_query->the_post();
        get_template_part( 'templates/content', 'posts' );
    endwhile;
    
    /*
      PAGINATION
    */
    if ( function_exists( 'page_navi' ) ) {
        ?>
    
        <div id="pagination">
            <?php page_navi(); ?>
        </div>
    <?php }
    wp_reset_query(); ?>
    
  2. if you use wp_pagenavi in front page, yes, it won’t work.
    you need to change the current paged in wp_pagenavi function like this:

    // I changed the code below, you can see what different from yours.

    if(!empty($paged)) {
        $paged = $paged;
    }elseif(get_query_var( 'paged')) {
        $paged = get_query_var('paged');
    }elseif(get_query_var( 'page')) {
        $paged = get_query_var('page');
    }else {
        $paged = 1;
    }
    
  3. Here is an improvement on the answer by @Devin-Walker. This is specifically for archive.php but can be adapted for other loops.

    Also it uses the native navigational links of WordPress instead of page_navi()

    Hope this helps someone.

    <?php
    /**
     * Archive Page
     *
     * @Since   1.0
     */
    
    // Exit if accessed directly
    if ( !defined('ABSPATH')) exit;
    ?>
    
    <?php get_header(); ?>
    
    <div class="container">
        <div class="row">
            <?php 
    
            // Note - Set number of posts per page in WP-Admin > Settings > Reading > 'Blog pages show at most'
            $args = array(
                'post_type'                 => 'post',
                'paged'                     => get_query_var('paged'),
                'cat'                       => get_query_var('cat'),
            );
    
            $wp_query = new WP_Query( $args );
    
            while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
    
                <div class="col-md-4 post-card archive my-4">
    
                    <div class="text-center">
                        <a href="<?php the_permalink(); ?>"><img src="<?php echo the_post_thumbnail_url('card-size'); ?>"></a>
                    </div>
                    <div class="post-card-details archive-post-details px-4 pb-2">
                        <h3 class="post-card-category px-4 py-2"><?php single_cat_title(); ?></h3>
                        <h3 class="post-card-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
                        <p class="post-card-p"><?php echo apply_filters( 'the_content', wp_trim_words( strip_tags( get_post_field('post_content') ), 15 ) ); ?></p>
                    </div>
    
                </div>
    
            <?php endwhile; ?>
    
        </div>
    
        <!-- Navigation -->
        <div class="tablet-pill tablet-pill-purple mb-5"><?php previous_posts_link( 'Previous Page' ); ?> <?php if(get_previous_posts_link() && get_next_posts_link()) echo ' - '; ?> <?php next_posts_link( 'Next Page' ); ?></div>
    
        <?php wp_reset_query(); ?>
    
    </div>
    
    <?php get_footer();
    

Comments are closed.