【问题标题】:Wordpress next_posts_link Linking to wrong URLWordpress next_posts_link 链接到错误的 URL
【发布时间】:2015-03-12 05:40:49
【问题描述】:

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

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

但是,这个 url 会被重定向到

http://mywebsite.com/news/article1

有什么方法可以进入第二页吗?

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

/%category%/%postname%/

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

【问题讨论】:

    标签: wordpress pagination


    【解决方案1】:

    您应该使用next_post_link(),它旨在在单个帖子之间导航。 next_posts_link 在页面之间导航

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

    编辑

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

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

    从 WPSE 发布

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

    【讨论】:

    • 目前我在左侧有一个完整的帖子,在右侧,我有一个包含 2 个帖子的列表。我正在尝试对右侧进行分页。当永久链接为默认值时,分页的工作方式与“mywebsite.com/?p=792&paged=2”相同,但当永久链接设置为 /%category%/%postname%/ 时,它会忽略“/page/2”
    • 是的,这行不通。我有一个工作,我将很快发布
    【解决方案2】:

    如果您希望长帖子显示 2 或 3 页。您只需在您的帖子中添加&lt;!--nextpage--&gt;。后面的内容会在下一页显示。 Reference

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-25
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      • 1970-01-01
      • 2015-07-09
      • 1970-01-01
      相关资源
      最近更新 更多