I made a query for my custom post type "websites". I'm trying to get the pagination working but I'm running in some errors. I think the whole code is ok, only the part just before the end while tags. I just don't know how to get this right. Any help would be enormously appreciated!


        // WP_Query arguments
        $args = array (
            'post_type'              => 'website',
            'post_status'            => 'publish',
            'pagination'             => true,
            'posts_per_page'         => '5',
            'posts_per_archive_page' => '5',
            'ignore_sticky_posts'    => false,
            'order'                  => 'DESC',

        // Get current page and append to custom query parameters array
        $mfs_query['paged'] = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;

        // The Query
        $mfs_query = new WP_Query( $args );

        // Pagination fix
        $temp_query = $wp_query;
        $wp_query   = NULL;
        $wp_query   = $mfs_query;

        // The Loop
        if ( $mfs_query->have_posts() ) {
            while ( $mfs_query->have_posts() ) {
                // do something

                ?> <div class="submission">

                    <a class="submission-thumb" href="<?php echo get_permalink(get_the_ID()); ?>">
                        <?php echo the_post_thumbnail(); ?>

                    <a class="submission-title" href="<?php echo get_permalink(get_the_ID()); ?>">
                        <h3><?php the_title(); ?></h3> <span class="posted-ago"><?php echo human_time_diff( get_the_time('U'), current_time('timestamp') ) . ' ago'; ?></span>

                    <a class="submission-link" href="<?php the_field('site_url'); ?>" target="_blank">Visit</a>


                <?php } ?>  
                <?php endwhile; else : ?> 

            <?php wp_reset_postdata(); ?>

            <p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>

            <?php // Custom query loop pagination
            previous_posts_link( 'Older Posts' );
            next_posts_link( 'Newer Posts', $mfs_query->max_num_pages ); ?>

            <?php $wp_query = null; $wp_query = $temp_query;?>

  • Would it not be easier to use a normal post type archive with a standard loop? Then the pagination would work out of the box. You can use pre_get_posts to modify it so that it only shows 5 per page, and you can change the URL of the archive using the rewrite parameter when registering the CPT. Replacing the main query with a whole new query is super wasteful and causes lots of problems ( usually pagination but others too )
    – Tom J Nowell
    Commented Aug 15, 2020 at 21:21

1 Answer 1


Just make sure that the code you have write in archive-{post_type}.php file or you can use ajax pagination

if you need to use page template: Add this 'has_archive' => 'page template' when you register the custom post type

  • thanks for your reply, but I think there's also something wrong with my code because I get a syntax error. The problem excists somewhere in the endwhile; else : part of the code I guess. Commented Mar 7, 2015 at 11:52
  • @fabrikgrafik just replace <?php endwhile; else : ?> with <?php } ?> Commented Mar 7, 2015 at 12:15
  • thank you, but I think I still need the endwhile else because now after my loop output I get "Sorry, no posts ...". And also after that I get: "Newer Posts ?>". So still a little mistake there. Also pagination is not working ... I have added "has archive" to my CPT register but no difference. I have page-websites.php and also archive-websites.php to be sure and none works .. Thanks again for your help, I am clueless and trying to learn how this works. Commented Mar 8, 2015 at 11:32

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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