Pagination + custom query + CPT

I’m trying to get pagination to work properly with a custom query and custom post type on front page but no luck so far. Here is my code:

@php

$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;

$q = new WP_Query( array(
	'post_type' => 'cake',
	'posts_per_page' => 10,
	'paged' => $paged
) );

$temp_q = $wp_query;
$wp_query = NULL;
$wp_query = $q;

@endphp

@if ($q->have_posts())
	@while ($q->have_posts()) @php($q->the_post())
		@include ('partials.content-'.(get_post_type() !== 'post' ? get_post_type() : get_post_format()))
	@endwhile

	@php(wp_reset_postdata())

	@if ($q->max_num_pages > 1)
		<nav class="posts-navigation">
			<div class="nav-previous">
      	{!! get_previous_posts_link( __('&larr; Previous', 'sage') ) !!}
    	</div>
    	<div class="nav-next">
      	{!! get_next_posts_link( __('Next &rarr;', 'sage'), $q->max_num_pages ) !!}
    	</div>
  	</nav>
  	@php
		$wp_query = NULL;
		$wp_query = $temp_query;
		@endphp
	@endif
@else
	<div class="alert alert-warning">
		{{ __('Sorry, no posts were found.', 'sage') }}
	</div>
@endif

@php
$wp_query = NULL;
$wp_query = $temp_q;
@endphp

Problems:

  • get_previous_posts_link() not showing on pages 2, 3, 4, etc.
  • get_next_posts_link() is showing on page 2, 3, 4, etc, but always return /page/2/

Edit:

Nervermind. I had to simply define global $paged; at the beginning :upside_down:

@php

global $paged

$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;

...
2 Likes