你有两个问题。
第一个问题是线路
$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
将失败,因为在单数post视图中,当URL包含
\'/page/XX/\'
, 变量WordPress集合为
\'page\'
而不是
\'paged\'
.
您可以考虑使用\'page\'
而不是\'paged\'
, 但这也行不通,因为一旦\'page\'
变量用于多页单数post(使用<!--nextpage-->
) 一旦文章不是多页的,WordPress会将请求重定向到URL,而不需要\'/page/XX/\'
.
这就是命名查询变量时发生的情况$wp_query
.
解决方案是通过删除负责重定向的函数来防止重定向,这是\'redirect_canonical\'
连接到\'template_redirect\'
:
所以,在你的functions.php
添加:
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
现在WordPress将不再重定向,并将正确设置
\'paged\'
查询变量。
第二个问题
next_posts_link()
和
previous_posts_link()
两个检查
if ( ! is_single() )
显示分页。
现在is_single()
在您的情况下是这样的,因为您在一篇“作者”类型的文章中,所以这些函数不能像您期望的那样工作。
您有3种可能性:
使用query_posts
覆盖主查询(真的not 建议)使用custom page template 而不是自定义帖子类型,因为is_single()
对于页面为false,您的代码将在那里工作编写您自己的分页函数并使用它,这是解决方案编号#3的代码:
function my_pagination_link( $label = NULL, $dir = \'next\', WP_Query $query = NULL ) {
if ( is_null( $query ) ) {
$query = $GLOBALS[\'wp_query\'];
}
$max_page = ( int ) $query->max_num_pages;
// only one page for the query, do nothing
if ( $max_page <= 1 ) {
return;
}
$paged = ( int ) $query->get( \'paged\' );
if ( empty( $paged ) ) {
$paged = 1;
}
$target_page = $dir === \'next\' ? $paged + 1 : $paged - 1;
// if 1st page requiring previous or last page requiring next, do nothing
if ( $target_page < 1 || $target_page > $max_page ) {
return;
}
if ( null === $label ) {
$label = __( \'Next Page »\' );
}
$label = preg_replace( \'/&([^#])(?![a-z]{1,8};)/i\', \'&$1\', $label );
printf( \'<a href="%s">%s</a>\', get_pagenum_link( $target_page ), esc_html( $label ) );
}
在
single-authors.php
:
my_pagination_link( \'Older Entries\', \'next\', $author_query );
my_pagination_link( \'Newer Entries\', \'prev\', $author_query );