正如我所说的,您所追求的整个设置在本机上是不可能的。您的设置可能使用默认的永久链接结构,因为两个查询(主查询和自定义查询)都以相同的方式读取这些永久链接。当您切换到permalinks时,单个页面上的两个查询会对URL进行不同的解释,从而在尝试对自定义查询分页时导致其中一个查询失败
单页永远不应该以这种方式分页,特别是使用漂亮的永久链接。我已经提出了一些想法,实现这一点的最佳方法是
编写自己的分页函数,可以从URL读取页码
编写您自己的函数,可以将页码附加到URL,例如添加/2/
到单个页面的URL。
我必须强调,如果你用<!--nextpage-->
, 您的帖子还将与自定义查询一起分页。此外,如果permalink结构未设置为/%postname%/
, 代码将失败并通过显示错误消息wp_die()
代码是获取下一页/上一页并将页码添加到URL的代码。
function get_single_pagination_link( $pagenum = 1 ) {
global $wp_rewrite;
if( is_singular() && $wp_rewrite->permalink_structure == \'/%postname%/\') {
$pagenum = (int) $pagenum;
$post_id = get_queried_object_id();
$request = get_permalink( $post_id );
if ( $pagenum > 1 ) {
$request = trailingslashit( $request ) . user_trailingslashit( $pagenum );
}
return esc_url( $request );
}else{
wp_die( \'<strong>The function get_single_pagination_link() requires that your permalinks are set to /%postname%/</strong>\' );
}
}
在对自定义查询分页时,可以按如下方式使用此函数获取单个页面中任何页面的链接
get_single_pagination_link( \'pagenumber_of_previous_or_next_page\' );
同样,正如我所说,没有分页函数能够对自定义查询分页或从URL读取页码,因此您必须编写自己的分页函数。
我的想法是在自定义查询中创建指向下一页和上一页的链接。如果仔细观察,您将看到我是如何使用前面声明的函数的get_single_pagination_link()
获取下一页和上一页的链接
function get_next_single_page_link ( $label = null, $max_page = 0 ) {
global $wp_query;
if ( !$max_page ) {
$max_page = $wp_query->max_num_pages;
}
$paged = ( get_query_var(\'page\') ) ? get_query_var(\'page\') : 1;
if( is_singular() ) {
$next_page = intval($paged) + 1;
if ( null === $label ) {
$label = __( \'Next Page »\' );
}
if ( ( $next_page <= $max_page ) ) {
return \'<a href="\' . get_single_pagination_link( $next_page ) . \'">\' . $label . \'</a>\';
}
}
}
function get_previous_single_page_link( $label = null ) {
$paged = ( get_query_var(\'page\') ) ? get_query_var(\'page\') : 1;
if( is_singular() ) {
$prev_page = intval($paged) - 1;
if ( null === $label ) {
$label = __( \'« Previous Page\' );
}
if ( ( $prev_page > 0 ) ) {
return \'<a href="\' . get_single_pagination_link( $prev_page ) . \'">\' . $label . \'</a>\';
}
}
}
现在可以在代码中使用这两个函数对自定义查询分页。这两个函数的工作原理完全相同
get_next_posts_link()
和
get_previous_posts_link()
并且使用相同的精确参数,因此您需要记住,您需要传递
$max_page
自定义查询的参数
这是使用这些函数的自定义查询。
function get_related_author_posts() {
global $authordata, $post;
$paged = ( get_query_var(\'page\') ) ? get_query_var(\'page\') : 1;
$args = array(
\'posts_per_page\' => 2,
\'paged\' => $paged
);
$authors_posts = new WP_Query( $args );
$output = \'\';
if( $authors_posts->have_posts() ) {
$output = \'<ul>\';
while( $authors_posts->have_posts() ) {
$authors_posts->the_post();
$output .= \'<li><a href="\' . get_permalink() . \'">\' . get_the_title() . \'</a>\' . get_the_excerpt() . \'</li>\';
}
$output .= \'</ul>\';
$output .= get_previous_single_page_link();
$output .= get_next_single_page_link( null , $authors_posts->max_num_pages );
wp_reset_postdata();
}
return $output;
}