WordPress.org

Ready to get started?Download WordPress

Forums

WP-PageNavi
[resolved] pagination fails on /page/3/ and above (4 posts)

  1. pq
    Member
    Posted 5 months ago #

    This page: http://amagents.staging.libertyconcepts.com/our-stories/ uses a query that displays 15 custom posts to desktop devices, 6 posts to tablets, and 3 posts to phones. The pagination cannot find /page/3/ and greater (returns a 404). There are currently 18 posts, so for now this error can only be seen on handhelds; but in my local environment, if I set the numposts to a number that always requires more than 2 pages, it breaks on desktop as well.

    The post number is set through a var like this (using mobble plugin to make additional device-sniffing available):

    $numposts = 0;
    if(!is_handheld()) {
    	$numposts = 15;
    	} elseif(is_handheld() && !is_tablet()) {
    		$numposts = 3;
    	} else {
    		$numposts = 6;
    }
    $story_query = new WP_Query( array (
    	'order' => 'ASC',
    	'orderby' => 'title',
    	'paged' => $paged,
    	'post_type' => 'cwa_stories',
    	'post_status' => 'publish',
    	'posts_per_page' => $numposts,
    	)
    );
    
    if ($story_query->have_posts()) : $c = 0; $post = $posts[0];
    while ( $story_query->have_posts() ) : $c++;
    $story_query->the_post();

    and pagenavi is called with this:
    wp_pagenavi(array('query'=>$story_query));

    Any ideas?

    http://wordpress.org/plugins/wp-pagenavi/

  2. pq
    Member
    Posted 5 months ago #

    I should add that I have set the $paged var before the wp_query:
    $paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

  3. pq
    Member
    Posted 5 months ago #

    Found the answer here: http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

    I moved $numposts definition from archive-cwa_stories.php to functions.php and removed the 'posts_per_page' element from the $story_query. Then I created a new page-cwa_stories.php following the instructions on wptuts.

    So the whole solution:

    1. Add to functions.php:

    // set number of posts to 15 on Our Stories page and enable pagination
    function stories_posts_per_page( $query ) {
    	$numposts = '';
    	if(!is_handheld()) {
    		$numposts = 15;
    	} elseif(is_handheld() && !is_tablet()) {
    		$numposts = 2;
    	} else {
    	$numposts = 6;
    }
    if ( $query->query_vars['post_type'] == 'cwa_stories' ) $query->query_vars['posts_per_page'] = $numposts;
    	return $query;
    }
    if ( !is_admin() ) add_filter( 'pre_get_posts', 'stories_posts_per_page' );

    2. Update custom post query on archive-cwa_posts.php:

    $story_query = new WP_Query( array (
    	'order' => 'ASC',
    	'orderby' => 'title',
    	'paged' => $paged,
    	'post_type' => 'cwa_stories',
    	'post_status' => 'publish',
    	)
    );
    if ($story_query->have_posts()) : while ( $story_query->have_posts() ) :  $story_query->the_post();

    3. Create page-cwa_stories.php with only this content:

    /* Template Name: Our Stories */
    
    $paged = 1;
    if ( get_query_var('paged') ) $paged = get_query_var('paged');
    if ( get_query_var('page') ) $paged = get_query_var('page');
    
    query_posts( '&post_type=cwa_stories&paged=' . $paged );
    
    require_once( 'archive-cwa_stories.php' );

    4. Set this as the template for /our-stories page.

    Pagination works! Shout out to Justin Carroll!

  4. flashpunk
    Member
    Posted 5 months ago #

    Hi there, i'm having a similar problem here, however with the default post type.

    I don't think this fix will work as it is effecting the way that custom post types are being displayed. Anyone have any other suggestions?

Reply

You must log in to post.

About this Plugin

About this Topic