Pagination on Custom Post Type: 404 Error

I’ve been getting a 404 error on a CPT archive page, and am not sure why. I can go to the page set for the custom post type archive, but the next page /mycustomposttype/page/2 gets a 404 error.

I don’t think that there’s anything wrong with my code and I’ve flushed my permalink rules and I think that the CPT is registered correctly. But my code is below. Any insights would be greatly appreciated since I can’t see why the pages are not being found. I did some research here, and saw similar issues and tried to follow allow of the solutions presented. But no luck.

<!-- Row for main content area -->
<div class="full-width" role="main" >

 <section id="sketchbook-wall">


   <ul id="sketchbook-container" class="large-block-grid-4">
        <?php 

        $paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
        $args = array(
          'post_type' => 'tn_cstm_sketchbook',
          'orderby' => 'menu_order',
          'order' =>  'ASC',
          'posts_per_page' => 2,
          'paged'=> $paged 
          );

          $loop = new WP_Query($args);
          while($loop->have_posts()) : $loop->the_post(); ?>
          <li>
            <figure class="sketch-thumb">

            <?php 
               if(get_field('sketch')) {
                $sketch = get_field('sketch');
                $large_image = wp_get_attachment_image_src( $sketch, 'full' );
                $thumbnail = wp_get_attachment_image_src( $sketch, 'large' );
                $attachment = get_post( get_field('sketch') );
                $alt = get_post_meta($attachment->ID, '_wp_attachment_image_alt', true);
              }
            ?>    

            <a href="https://wordpress.stackexchange.com/questions/104113/<?php echo $large_image[0]; ?>" data-id="<?php the_ID(); ?>"  class="reveal" >

              <img src="<?php echo $thumbnail[0]; ?>" alt="<?php echo $alt; ?>" />

            </a> 
            <figcaption>

            </figcaption>

            </figure>

          </li>

        <?php endwhile; ?>

      </ul>


  <nav>
    <?php
    // Bring $wp_query into the scope of the function
    global $wp_query;

    // Backup the original property value
    $backup_page_total = $wp_query->max_num_pages;

    // Copy the custom query property to the $wp_query object
    $wp_query->max_num_pages = $loop->max_num_pages;
    ?>

    <!-- now show the paging links -->
    <div class="alignleft"><?php next_posts_link('Next Entries'); ?></div>
    <div class="alignright"><?php previous_posts_link('Previous Entries'); ?></div>

    <?php
    // Finally restore the $wp_query property to it's original value
    $wp_query->max_num_pages = $backup_page_total;
    ?>
  </nav>


 </section>

 </div>  <!-- End Content -->


<?php

    // Register Custom Post Taxonomy
     public  function create_work_taxonomies() {
            register_taxonomy(
                'tn_cstm_sketchbook_plugin',
                'tn_cstm_sketchbook',
                array(
                    'labels' => array(
                        'name' => 'Sketchbook Categories',
                        'add_new_item' => 'Add New Sketchbook Category',
                        'new_item_name' => "New Sketchbook Category"
                    ),
                    'show_ui' => true,
                    'show_in_nav_menus' => true,
                    'show_admin_column' => true, //Show custom taxonomy in admin columns
                    'show_tagcloud' => false,
                    'hierarchical' => true,
                    'args' => array( 'orderby' => 'term_order' ),
                    'rewrite' => array('slug' => 'sketchbook-categories', 'with_front' => false )
                )
            );
        }


    // Register Custom Post Type
       public function create_sketchbook_work() {
            register_post_type( 'tn_cstm_sketchbook',
                array(
                    'labels' => array(
                        'name' => 'Sketchbook',
                        'singular_name' => 'Sketchbook Page',
                        'add_new' => 'Add New Sketchbook Page',
                        'add_new_item' => 'Add New Sketchbook Page',
                        'edit' => 'Edit Sketchbook Page',
                        'edit_item' => 'Edit Sketchbook Page',
                        'new_item' => 'New Sketchbook Page',
                        'view' => 'View Sketchbook Page',
                        'view_item' => 'View Sketchbook Pages',
                        'search_items' => 'Search Sketchbook Pages',
                        'not_found' => 'No Sketchbook Pages found',
                        'not_found_in_trash' => 'No Sketchbook Pages Found in Trash',
                        'parent' => 'Parent Sketchbook Page'
                    ),

                    'public' => true,
                    'show_in_menu' => true,
                    'menu_position' => 29,
                    'taxonomies' => array( '' ),
                    'menu_icon' => plugins_url( 'images/sketchbook-icon.png', __FILE__ ),
                    'publicly_queryable' => true,
                    'query_var' => true,
                    'rewrite' => array( 'slug' => 'sketchbook', 'with_front' => false ),  
                    'has_archive' => true,
                    'hierarchical' => false,
                    'supports' => array( 'title', 'page-attributes' )
                )
            );
        }

?>

2 Answers
2

While pre_get_posts is a much better solution for modifying the parameters for the archive main query for specific conditions like Custom Post Types, as Milo and helgatheviking mentioned, trying to use a custom query to override the main query for an archive is overcomplicating the issue.

Since I’m building a custom Tumblr like gallery template that pulls in the featured post image linked through thumbnails on the page through AJAX and a modal pop-up window, what I ended up doing was using my custom query above in a custom template that I assigned for a page that I created. Going to the page, I get the pagination behavior that I wanted.

Leave a Comment