显示不正确上一页号的分页链接

时间:2017-10-02 作者:Sylar

似乎无法使用返回到带有上一个链接的索引页paginate_links(). 上一个链接正在链接到第2页。

$paged = ( get_query_var( \'paged\' ) ) ? absint( get_query_var( \'paged\' ) ) : 1;
 $_args = array(
   \'orderby\'       =>  \'post_date\',
   \'order\'         =>  \'DSC\',
   \'paged\'         => $paged,
   \'post_type\' => \'post\',
   \'posts_per_page\' => 2, // I have more but just show to pagination
   \'post_status\'    => \'publish\'
  );

  $_posts = new WP_Query( $_args );


$arr = paginate_links(array(
  \'base\'               => \'%_%\',
    \'format\'             => \'?paged=%#%\',
    \'total\'              => $_posts->max_num_pages,
    \'current\'            => max( 1, get_query_var(\'paged\') ),
    \'show_all\'           => false,
    \'end_size\'           => 1,
    \'mid_size\'           => 2,
    \'prev_next\'          => true,
    \'prev_text\'          => __(\'« Previous\'),
    \'next_text\'          => __(\'Next »\'),
    \'type\'               => \'array\',
    \'add_args\'           => false,
    \'add_fragment\'       => \'\',
    \'before_page_number\' => \'\',
    \'after_page_number\'  => \'\'
));

foreach( (array) $arr as $link ) {
  var_dump( $link );
}
在上?paged=2, 上一个链接仍指向?paged=2 当它应该返回到索引页面时,我应该在该页面中看到所有帖子或返回到上一页。请问发生了什么事?

2 个回复
SO网友:FluffyKitten

您使用的是Codex中示例中的代码,但这是默认博客主页的默认“普通”永久链接。我的猜测是,您这样做是为了存档,而不是主页。

Search & Archive pages

默认情况下,paginate_links 假设分页是针对主页上的博客。在所有其他情况下,您需要如下更改代码(参考:Codex: paginate_links):

$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    \'base\' => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),
    \'format\' => \'?paged=%#%\',

    // rest of your arguments here

) );

What this does:

我们需要改变paginate_links 使用存档页面的链接,而不是主页。我们通过改变base 参数以包括url。我们还需要改变format 使用正确的参数。

创建一个数字很大的变量,该变量不太可能是有效的页码,例如$big = 999999999;

设置base 论点

适用于base, 您需要告诉paginate\\u links使用url。我们通过使用get_pagenum_link 获取永远不存在的页面的url,然后我们将url中的页码替换为实际页码

\'base\' => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) )
设置format 参数format 默认使用page 参数(用于静态主页),因此我们需要将其更改为使用paged 而是:

    \'format\' => \'?paged=%#%\',

NOTE: Pretty Permalinks

如果您正在主页上显示分页,并且使用了相当多的永久链接,但仍然存在问题,请尝试以下操作。

根据Codex,如果您使用的是“漂亮”永久链接,则应按以下方式更改格式:

\'format\'             => \'/page/%#%\',
format
(字符串)(可选)用于分页结构。默认值为?page=%#%, 如果使用漂亮的永久链接/page/%#%, 其中%#% 替换为页码。

这是一个很好的实践,但不是必需的,因为Wordpress重写规则将自动转换?paged 参数

SO网友:Kuliraj

我认为,单击上一个链接时,您正在将url中的内容传递给查询。

您是否尝试使用base param而不是foreaching来回显链接?

$big = 999999999; // need an unlikely integer

echo paginate_links( array(
    \'base\' => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),
    \'format\' => \'?paged=%#%\',
    \'current\' => max( 1, get_query_var(\'paged\') ),
    \'total\' => $_posts->max_num_pages,
) );

结束

相关推荐

Query post Pagination Problem

我正在使用以下代码进行查询帖子,但我没有得到分页链接。以下代码的问题在哪里。<div id=\"primary\" class=\"content-area\"> <main id=\"main\" class=\"site-main\" role=\"main\"> <?php $arr = array( \'post_type\' => \'post