The line
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;
will fail, because on singular post view, when the URL contains '/page/XX/'
, the variable WordPress sets is 'page'
and not 'paged'
.
You may think to use 'page'
instead of 'paged'
, but that will not work either, because once the 'page'
variable is intended to be used for multi-page singular post (page separation using <!--nextpage-->
) and once the post is not multi-page, WordPress will redirect the request to the URL without '/page/XX/'
.
This is what happens when you name your query variable $wp_query
.
The solution is to prevent that redirection by removing the function responsible for it, which is 'redirect_canonical'
hooked into 'template_redirect'
:
So, in your functions.php
add:
add_action( 'template_redirect', function() {
if ( is_singular( 'authors' ) ) {
global $wp_query;
$page = ( int ) $wp_query->get( 'page' );
if ( $page > 1 ) {
// convert 'page' to 'paged'
$wp_query->set( 'page', 1 );
$wp_query->set( 'paged', $page );
}
// prevent redirect
remove_action( 'template_redirect', 'redirect_canonical' );
}
}, 0 ); // on priority 0 to remove 'redirect_canonical' added with priority 10
Now WordPress will not redirect anymore and will set correctly the 'paged'
query var.