Wordpress next_posts_link链接到错误的URL

时间:2015-01-14 05:03:24

标签: wordpress pagination

我在single.php上设置了next_posts_link,它会生成以下网址:

  

http://mywebsite.com/news/article1/page/2

但是,此网址将重定向到

  

http://mywebsite.com/news/article1

有没有办法到达第二页?

似乎Wordpress永久链接存在问题。我目前使用自定义永久链接结构

  

/%类别%/%postname%/

将固定链接设置为默认值可解决此问题,但此项目需要具有自定义永久链接。

2 个答案:

答案 0 :(得分:0)

如果您希望您的长篇文章显示2或3页。您只需在帖子中添加<!--nextpage-->即可。其后的内容将在下一页显示。 Reference

答案 1 :(得分:0)

您应该使用next_post_link()来表示在单个帖子之间导航。 next_posts_link在页面之间进行导航

如果您需要导航分页帖子(使用<--nextpage-->),那么您应该使用wp_link_pages

修改

我最近在WPSE做了同样的事情。正如我在该帖子中解释的那样,您需要的结构不适用于默认永久链接结构之外的任何永久链接结构。

在我粘贴答案之前,请注意,我已为/%postname%/永久链接结构执行此操作。只需将/%postname%/的所有实例更改为适当的结构

即可

从WPSE发布

正如我所说,你所追求的整个设置本身并不可能完全永久链接。您的设置可能适用于默认的永久链接结构,因为两个查询(主查询和您的自定义查询)以相同的方式读取这些永久链接。当您切换到非常永久链接时,单个页面上的两个查询会以不同方式解释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 &raquo;' );
        }

        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 = __( '&laquo; 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;

}