0

I'm trying to make a pagination for my category.php. My posts are custom post type.
I get a 404 not found error when I'm trying to get to the second page. I realised that this is happening only for category.php and not another page/template.

The code is:

<?php                        
                $paged = get_query_var('paged');

                $args = array(
                'post_type' => 'products',
                'post_status' => 'publish',
                'cat' => $cat,
                'posts_per_page' => 20,
                'paged' => $paged
            );

            $query = new WP_Query( $args );

            if ( $query->have_posts() ) :              
                while ( $query->have_posts() ) : $query->the_post();?>
                    <a href="<?php the_permalink();?>">
                        <div class="product">
                            <div class="image-container">
                                <?php the_post_thumbnail();?>
                            </div> 
                            <p class="title"><?php the_title(); ?></p>
                        </div>    
                    </a>                   
                <?php 
                endwhile;?> 
                <div class="pagination-container">
                    <div class="pagination">
                        <?php 
                        echo paginate_links(array(
                            'total' => $query->max_num_pages
                        ));?>
                    </div>
                </div>

            <?php endif;?>
0

Check up the wordpress templating hierarchy The graphics reads from left to right. You have custom post type products so you can override this file and your code should be in category-products.php, since you are limiting your WP queury for products posts. Category.php is similar but without this limitation.

   // Your category-products.php loop should be like this
   <!-- Prepare query -->
   $your_query = new WP_Query( array(
     'post_type' => 'products',
     'posts_per_page' => 20,
   ));

   if ( $your_query ->have_posts() ) :

   while ( $your_query ->have_posts() ) : $your_query ->the_post();?>
   <!-- Show a card -->
   <a href="<?php the_permalink();?>">
   <div class="product">
   <div class="image-container">
   <?php the_post_thumbnail();?>
   </div> 
   <p class="title"><?php the_title(); ?></p>
   </div>    
   </a>   

   <!-- loop-end -->
   <?php endwhile;  ?>

   <!-- pagination -->
   <div class="col-md-8 post_paginations" style="text-align:center;">
   <?php the_posts_pagination( array(
   'mid_size'  => 2,
   'screen_reader_text' => __( ' ', 'theme_name' ),
   'prev_text' => __( 'Previous', 'theme_name' ),
   'next_text' => __( 'Next', 'theme_name' ),
   ) ); ?>
   </div>

   <!-- Else -->
   <?php else : ?>
   <h1><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></h1>
   <?php endif; ?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.