WordPress.org

Ready to get started?Download WordPress

Forums

WP_Query and Pagination (19 posts)

  1. johnsinn84
    Member
    Posted 1 year ago #

    I am using WP_Query to call posts from a specific category as shown in the code below. How do I add pagination to show the rest of the posts from this category?

    <?php
    
    get_header(); ?>
    
    		<?php
    		//get 4 recent posts for category 3
    		    $args=array(
    		      'category__in' => array(3),
    		      'showposts'=>4,
    		      'caller_get_posts'=>1
    		    );
    		    $my_query = new WP_Query($args);
    		    if( $my_query->have_posts() ) {
    		      while ($my_query->have_posts()) : $my_query->the_post(); ?>
    <div class="recvidimgborder">
    <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><img src="<?php video_thumbnail(); ?>" class="recvidimg" /></a>
    </div>
    
    		       <?php
    		      endwhile;
    		    } //if ($my_query)
    		  wp_reset_query();  // Restore global post data stomped by the_post().
    		?>
    
    <div style="clear:both;"></div><br /><br /><?php get_footer(); ?>
  2. keesiemeijer
    moderator
    Posted 1 year ago #

    Try adding the "paged" parameter to the query:
    http://codex.wordpress.org/Pagination#Adding_the_.22paged.22_parameter_to_a_query

    And put one of these functions after the loop (endwhile;) and before the wp_reset_query();:
    http://codex.wordpress.org/Pagination#Function_Reference

  3. johnsinn84
    Member
    Posted 1 year ago #

    After some searching, I altered the code to the following....

    <?php
    
                $temp = $wp_query;
                $wp_query= null;
                $wp_query = new WP_Query();
                $args = array(
                     'category__in' => array( 3 ),
                     'posts_per_page' => 3,
                     'paged' => $paged,
                     'order' => 'DESC',
                );
                $wp_query->query($args);
                $max_page = $wp_query->max_num_pages;
    
                while ($wp_query->have_posts()): $wp_query->the_post();  ?>
    
                <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><img src="<?php video_thumbnail(); ?>" class="recvidimg" /></a>
    
          <?php      endwhile;
    
    $big = 999999999; // need an unlikely integer
    
    echo paginate_links( array(
    	'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    	'format' => '?paged=%#%',
    	'current' => max( 1, get_query_var('paged') ),
    	'total' => $max_page
    ) );		
    
    wp_reset_query();
    
    			?>

    The pagination shows up and has the proper amount of pages. However, anything passed page 2 shows a "page not found"

  4. Jay
    Member
    Posted 1 year ago #

    Try this as your loop

    $wp_query = new WP_Query('cat=3&showposts=3&order=DESC&paged='.$paged);
    while ($wp_query->have_posts()): $wp_query->the_post(); 
    
    // Do Stuff
    
    endwhile;
  5. sume
    Member
    Posted 1 year ago #

    <?php get_header(); ?>
    
    	 <?php
    		//Get value from Admin Panel
    		$cp_categories = get_categories('hide_empty=0');
            $status1 = get_option( "colabs_preventHeadline" );
            if ( $status1 != "No" ) {
                $ar_headline = get_option( "colabs_headline" );
                $ar_featured = get_option( "colabs_featured" );
            }
            ?>
    
    	<div id="bottom" class="clearfloat">
    
    	<div class="<?php if(get_option('colabs_layout_settings')=='two-col-right'){echo 'right';}else{?>left<?php }?>">
    
    	<?php if(!is_paged() && 1 == 2) { ?>	
    
    	<div id="front-list">	
    
    	<?php
    
    		$args = array(
    			'category__not_in' => array($ar_headline,$ar_featured),
    			'showposts' => 1,
    		);
    
    		query_posts($args); ?>
    
    	<?php while (have_posts()) : the_post(); ?>
        <?php global $ar_ID; global $post; $ar_ID[] = $post->ID; ?>
    
    	<div class="clearfloat">
    	<h3 class="cat_title"><?php the_category(', '); ?> &raquo;</h3>
    	<h2 class="title"><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
        <?php colabs_post_meta(); ?>
        <?php
    		$latest_thumb=get_option('colabs_latest_post_thumb');
    		if($latest_thumb!='No'){
    		$width = get_option ( "colabs_thumbWidth_LatestPost" );
    		$height = get_option ( "colabs_thumbHeight_LatestPost" );
    		if ( $width == 0 ) { $width = 150; }
    		if ( $height == 0 ) { $height = 150; }
            colabs_pp('width='.$width.'&height='.$height.'&size=medium-thumb&play=true&wrapper_class=left&link=img');
    		}
    	?>
    
    	<?php //the_content(__('Read the full story &raquo;','colabsthemes')); ?>
    	<?php the_excerpt(); ?>
    	</div>
    
          	<?php endwhile; ?>
    	<?php wp_reset_query(); ?>
    
    	</div><!--/#front-list-->
    
    	<?php } ?>
    
        <?php add_filter('post_limits', 'my_post_limit'); ?>
    
        <?php
    		global $myOffset;
    		$myOffset = 0;
    		$temp = $wp_query;
            $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
    
    		//echo 'SINGLEPOST:';
    		$singlePost = get_query_var('singlePost');
    
    		$wp_query= null;
    		$wp_query = new WP_Query();
    		$wp_query->query(array(
                    'paged' => $paged,
    				'offset' => $myOffset,
    				'category__not_in' => array($ar_headline,$ar_featured),
                    'post__not_in' => get_option( 'sticky_posts' ),
                    'ignore_sticky_posts' => 1,
                    'post_type' => !$singlePost ? array('post','haberler','otopsiler') : array('post'),
    				)); 
    
    		?>
    
    	<?php $column = get_option ( "colabs_status_Column" );
    		if ( $column != "one" ) { ?>	
    
    	<div id="paged-list">	
    
    		<?php if (have_posts()) : ?>
    		<?php $i = 1; ?>
    
    		<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
            <?php global $ar_ID; global $post; $ar_ID[] = $post->ID; ?>
    
    	<?php if( $odd = $i%2 ) { echo '<div class="clearfloat">'; } ?>
    
    	<div class="tanbox <?php if( $odd = $i%2 ) { echo 'left'; } else { echo 'right'; } ?>">
            <h3 class="title"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
        <?php
            colabs_post_meta();
    
            $width = get_option ( "colabs_thumbWidth_Column" );
    		$height = get_option ( "colabs_thumbHeight_Column" );
    		if ( $width == 0 ) { $width = 80; }
    		if ( $height == 0 ) { $height = 80; }
            colabs_pp('width='.$width.'&height='.$height.'&size=small-thumb&play=true&wrapper_class=left&link=img');
        ?>
    
    		<?php $status = get_option ( "colabs_excerptColumn" );		if ( $status != "no" ) { ?>
    		<?php the_excerpt(); ?>
    		<?php } ?>
    	</div>
    
    	<?php if( $odd = $i%2 ) { } else { echo '</div>'; } ?>
    
          <?php $i++; endwhile; ?>
    
    	<?php if( $odd = $i%2 ) { } else { echo '</div>'; } ?>
    
    	<div id="navigation">
    	<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?>
    
    	</div>
    
    	<?php endif; ?>
    	</div><!--/#paged-list-->
    
    	<?php } else { ?>
    
    	<div id="paged-list">	
    
    		<?php if (have_posts()) : ?>
    
    		<?php while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
    	    <?php global $ar_ID; global $post; $ar_ID[] = $post->ID; ?>
    
    		<div class="onecolumn clearfloat">
    
             <h3 class="title"><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php the_title(); ?>"><?php the_title(); ?></a></h3>
    	<?php
            colabs_post_meta();
            echo "<!-- /HEREEEEEEE -->";
    
            $width = get_option ( "colabs_thumbWidth_Column" );
    		$height = get_option ( "colabs_thumbHeight_Column" );
    		if ( $width == 0 ) { $width = 80; }
    		if ( $height == 0 ) { $height = 80; }
            colabs_pp('width='.$width.'&height='.$height.'&size=small-thumb&play=true&wrapper_class=left&link=img');
        ?>
    
    		<?php $status = get_option ( "colabs_excerptColumn" );		if ( $status != "no" ) { ?>
    		<?php the_excerpt(); ?>
    		<?php } ?>
    		</div>
    
          	<?php endwhile; ?>
    
    		<div id="navigation">
    		<?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } ?></div>
    
    		<?php endif; ?>
    
    	</div><!--/#paged-list-->
    
    	<?php } ?>	
    
    	<?php $wp_query = null; $wp_query = $temp;?>
    	<?php remove_filter('post_limits', 'my_post_limit'); ?>
    
    	</div><!--/#bottom-left-->
    	<div id="sidebar" class="<?php if(get_option('colabs_layout_settings')=='two-col-right'){echo 'left';}else{?>right<?php }?>">
    	<?php get_sidebar(); ?>
    	</div><!--/#bottom-->
    
    <?php get_footer(); ?>

    my code is above. page 3 isn't working. please help me

  6. keesiemeijer
    moderator
    Posted 1 year ago #

    @sume
    Please create your own topic

    @johnsinn84
    Try it with the "paged" parameter added:

    <?php
                $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
                $temp = $wp_query;
                $wp_query= null;
                $wp_query = new WP_Query();
                $args = array(
                     'category__in' => array( 3 ),
                     'posts_per_page' => 3,
                     'paged' => $paged
                );
                $wp_query->query($args);
                $max_page = $wp_query->max_num_pages;
    
                while ($wp_query->have_posts()): $wp_query->the_post();  ?>
    
                <a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><img src="<?php video_thumbnail(); ?>" class="recvidimg" /></a>
    
          <?php      endwhile;
    
    $big = 999999999; // need an unlikely integer
    
    echo paginate_links( array(
    	'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
    	'format' => '?paged=%#%',
    	'current' => max( 1, get_query_var('paged') ),
    	'total' => $wp_query->max_num_pages
    ) );		
    
    wp_reset_postdata();
    $wp_query= null;
    $wp_query= $temp;
    ?>

    Is this on a static front page?

  7. johnsinn84
    Member
    Posted 1 year ago #

    @jay and @keesiemeijer

    Neither variation worked - same result; anything after page 2 as "not found"

    I should also point out that I have another wp_query on the page unless that effects it. I did add wp_reset_query() at the end though.

    Thanks for the help, by the way.

  8. keesiemeijer
    moderator
    Posted 1 year ago #

    Is this on a static front page or on a custom page template

    Basically on what template file are you using this?

    Can you paste and submit the full template code (with both queries) into a pastebin.com and post the link to it here? see the Forum Rules for posting code and using the pastebin.

  9. johnsinn84
    Member
    Posted 1 year ago #

    This is the main index template (index.php). Should I be doing this on a different template file?

    Pastebin...

    http://pastebin.com/M4s01vej

    ...I tried to clean it up so it's easier to read. I put a lot of space before and after the portion in question.

  10. Jay
    Member
    Posted 1 year ago #

    Try this Just copy and paste the whole thing. Make sure you backup your original file first.

  11. johnsinn84
    Member
    Posted 1 year ago #

    @Jay

    Same result. Goes to page 2 fine and then "Not Found" after that.

  12. keesiemeijer
    moderator
    Posted 1 year ago #

    there can only be one paginated loop. I'm guessing you want both paginated?

  13. johnsinn84
    Member
    Posted 1 year ago #

    @keesiemeijer

    Just the 2nd one. I only want the 4 most recent for the first loop.

  14. keesiemeijer
    moderator
    Posted 1 year ago #

    Try it with this [untested]: http://pastebin.com/JHvhye5Y

    And with this in your theme's functions.php:

    function my_post_queries( $query ) {
      // not an admin page and is the main query
      if (!is_admin() && $query->is_main_query()){
        // query the home page
        if(is_home()){
          $query->set('posts_per_page', 2);
          $query->set('cat', 3);
        }
      }
    }
    add_action( 'pre_get_posts', 'my_post_queries' );

    http://codex.wordpress.org/Pagination#Removing_query_posts_from_the_main_loop

  15. johnsinn84
    Member
    Posted 1 year ago #

    @keesiemeijer

    Works! Thank you so much! You're officially awesome in my books. For future reference, may I ask where I went wrong in the coding?

    @Jay

    Thank you very much for taking the time to try to help. I very much appreciate it.

  16. keesiemeijer
    moderator
    Posted 1 year ago #

    Well that's difficult to say. I think this thread here explains it very wel. http://wordpress.stackexchange.com/questions/50761/when-to-use-wp-query-query-posts-and-pre-get-posts

    especially the comment by Rarst.

    You used the wrong method (new WP_Query()) to alter the main loop. A better way (on archive, search, and index pages) is to query it by hooking into 'pre_get_posts' and altering the main query by using is_main_query() in your theme's functions.php.

    (very technical article) http://developer.wordpress.com/2012/05/14/querying-posts-without-query_posts/

    Use new WP_Query() on secondary loops and on page templates.

    You also used wp_reset_query(); after your first (secondary) loop where it should be wp_reset_postdata().

    http://digwp.com/2011/09/3-ways-to-reset-the-wordpress-loop/

    I know this is all really confusing, but there is an order to it.

    I'm glad you got it resolved. :-)

  17. Jay
    Member
    Posted 1 year ago #

    Thanks keesiemeijer, that helped me clean up some of my loops :),

  18. johnsinn84
    Member
    Posted 1 year ago #

    Confusing, indeed. lol.

    Thanks again for all of the help everyone!

  19. jk_
    Member
    Posted 1 year ago #

    This post is a life saver ! Thank you keesiemeijer.

Topic Closed

This topic has been closed to new replies.

About this Topic