我在single.php上设置了next_posts_link,它会生成以下网址:
但是,此网址将重定向到
有没有办法到达第二页?
似乎Wordpress永久链接存在问题。我目前使用自定义永久链接结构
/%类别%/%postname%/
将固定链接设置为默认值可解决此问题,但此项目需要具有自定义永久链接。
答案 0 :(得分:0)
如果您希望您的长篇文章显示2或3页。您只需在帖子中添加<!--nextpage-->
即可。其后的内容将在下一页显示。 Reference
答案 1 :(得分:0)
您应该使用next_post_link()
来表示在单个帖子之间导航。 next_posts_link
在页面之间进行导航
如果您需要导航分页帖子(使用<--nextpage-->
),那么您应该使用wp_link_pages
我最近在WPSE做了同样的事情。正如我在该帖子中解释的那样,您需要的结构不适用于默认永久链接结构之外的任何永久链接结构。
在我粘贴答案之前,请注意,我已为/%postname%/
永久链接结构执行此操作。只需将/%postname%/
的所有实例更改为适当的结构
正如我所说,你所追求的整个设置本身并不可能完全永久链接。您的设置可能适用于默认的永久链接结构,因为两个查询(主查询和您的自定义查询)以相同的方式读取这些永久链接。当您切换到非常永久链接时,单个页面上的两个查询会以不同方式解释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;
}