【发布时间】:2015-03-12 05:40:49
【问题描述】:
我在 single.php 上设置了 next_posts_link,它会生成以下 URL:
但是,这个 url 会被重定向到
有什么方法可以进入第二页吗?
这似乎是 Wordpress 永久链接的问题。我目前使用自定义永久链接结构
/%category%/%postname%/
将永久链接设置为默认值可解决此问题,但此项目需要具有自定义永久链接。
【问题讨论】:
标签: wordpress pagination
我在 single.php 上设置了 next_posts_link,它会生成以下 URL:
但是,这个 url 会被重定向到
有什么方法可以进入第二页吗?
这似乎是 Wordpress 永久链接的问题。我目前使用自定义永久链接结构
/%category%/%postname%/
将永久链接设置为默认值可解决此问题,但此项目需要具有自定义永久链接。
【问题讨论】:
标签: wordpress pagination
您应该使用next_post_link(),它旨在在单个帖子之间导航。 next_posts_link 在页面之间导航
如果您需要导航分页帖子(使用<--nextpage-->),那么您应该使用wp_link_pages
我最近在WPSE 上做了同样的事情。正如我在那篇文章中解释的那样,您需要的结构不适用于默认永久链接结构之外的任何永久链接结构。
在我粘贴该答案之前请注意,我已经为/%postname%/ 永久链接结构完成了该操作。只需将/%postname%/ 的所有实例更改为适当的结构
正如我所说,您所追求的整个设置本身不可能通过漂亮的永久链接进行。您的设置可能适用于默认的永久链接结构,因为两个查询(主查询和您的自定义查询)都以相同的方式读取这些永久链接。当您切换到漂亮的永久链接时,单个页面上的两个查询会以不同的方式解释 URL,从而在您尝试对自定义查询进行分页时导致其中一个或另一个失败
单页不应该以这种方式进行分页,特别是使用漂亮的永久链接。我已经尝试了一些想法,而实现这一目标的最佳方法是
编写自己的分页函数,可以从URL中读取页码
编写您自己的函数,可以将页码附加到 URL,例如将 /2/ 添加到单个页面的 URL。
我必须强调,如果您使用<!--nextpage--> 对单个帖子进行分页,您的帖子也会与您的自定义查询一起分页。此外,如果您的永久链接结构未设置为/%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;
}
【讨论】:
如果您希望长帖子显示 2 或 3 页。您只需在您的帖子中添加<!--nextpage-->。后面的内容会在下一页显示。 Reference
【讨论】: