Another user on here suggested that my use of queries was incorrect so I’m changing the code. However, the pagination in the first block of code (below) isn’t showing up in the HTML while the second one (my original) shows up fine.
This one doesn’t work (new code):
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$loop = new WP_Query( array(
'post_type' => 'movies',
'paged' => $paged,
'posts_per_page' => 6
));
if($loop->have_posts()){
while ( $loop->have_posts() ) {
$loop->the_post();
<< LOOP GOES HERE >>
<?php
}
}
my_paginate_links();
wp_reset_postdata();
?>
This one works (my original code):
$c=0;
$i=1;
$temp = $wp_query;
$wp_query = null;
$wp_query = new WP_Query();
$wp_query->query('post_type=movies' . '&paged=' . $paged . '&posts_per_page=6');
while ( $wp_query->have_posts() ) : $wp_query->the_post(); $c++;
<< LOOP GOES HERE >>
<?php
endwhile;
my_paginate_links();
$wp_query = null;
$wp_query = $temp;
wp_reset_query();
?>
How can I get pagination to show up in the first block of code?
Rather than attempt to fix your query, I recommend you sidestep it entirely by using custom post type archives!
With permalinks on, you should be able to view a list of all your movies posts by going to:
Then, in your theme, create
archive-movies.php
, and it will be used instead of thearchive.php/index.php
for movies archives. Make sure to use the default loop not a custom loop, and WordPress will take care of the post type and pagination in your query.To control how many posts are displayed on this archive, you can do a filter on
pre_get_posts
to modify the main query before it happens.Here is a working example of how to use paged pagination with custom post types: