页面链接忽略我的格式(_L)

时间:2017-08-02 作者:Toni Michel Caubet

我需要分页liks来获得url,例如:

current_url?p-page=1
current_url?p-page=2
current_url?p-page=3
所以。。我之所以需要它,是因为我在页面中有其他参数。

问题是,在文档中,它规定了:

format

(字符串)(可选)用于分页结构。默认值为“?page=%\\%,如果使用相当长的永久链接,则为“/page/%\\%”,其中“%\\%”被页码替换。默认值:\'?页码=%\\\\%\'

我启用了友好的url,

如何防止默认设置(顺便说一句,它会忽略我的p-page, 仍在使用page )

current_url/page/1
current_url/page/2
current_url/page/3
这是我的代码,现在:

echo paginate_links( array(
    \'base\'         => str_replace( 999999999, \'%#%\', esc_url( get_pagenum_link( 999999999 ) ) ),
    \'total\'        => $query->max_num_pages,
    \'current\'      => max( 1, get_query_var( \'p-page\' ) ),
    \'format\'       => \'?p-page=%#%\',
    \'show_all\'     => false,
    \'type\'         => \'plain\',
    \'end_size\'     => 2,
    \'mid_size\'     => 1,
    \'prev_next\'    => true,
    \'prev_text\'    => sprintf( \'<i></i> %1$s\', \'<i class="icon-chevron-left"></i>\' ),
    \'next_text\'    => sprintf( \'%1$s <i></i>\', \'<i class="icon-chevron-right"></i>\' ),
    \'add_args\'     => false,
    \'add_fragment\' => \'\',
) );
作为临时解决方案,我这样做:

if ($current_page > 1) {
    echo \'<a href="?p-page=\'.($current_page-1).\'" class="page-numbers prev"><i class="icon-chevron-left"></i></a>\';
}
for ($i = 1; $i <= $query->max_num_pages; $i++) {
    echo \'<a href="?p-page=\'.$i.\'" class="page-numbers \'.($current_page == $i ? \'current\' : \'\').\'">\'.$i.\'</a>\';
}
if ($current_page < $query->max_num_pages) {
    echo \'<a href="?p-page=\'.($current_page+1).\'" class="page-numbers prev"><i class="icon-chevron-right"></i></a>\';
}
但如果能利用dots的功能,那就太好了,等等。。有什么想法吗?

1 个回复
最合适的回答,由SO网友:birgire 整理而成

本部分:

\'base\' => str_replace( 999999999, \'%#%\', esc_url( get_pagenum_link( 999999999 ) ) ),
正在生成page 像这样的部分:

\'base\' => http://example.tld/page/%#%/
如果我们偷看paginate_links() 我们看到默认值:

\'base\' => $pagenum_link, // http://example.com/all_posts.php%_% : 
                         // %_% is replaced by format (below)
\'format\' => $format,     // ?page=%#% : %#% is replaced by the page number
其中内联注释表示%_% 替换为格式。

文件还指出:

的示例‘base’ 参数为"http://example.com/all_posts.php%_%" 以及‘%_%’ 是必需的。这个‘%_%’ 将替换为中的内容‘format’ 论点示例‘format’ 参数为"?page=%#%" 并且还需要“%\\%”。这个‘%#%’ 将替换为页码。

如果我们使用:

\'base\' => \'%_%\'
然后它将与format 论点

以下是OP示例的修改:

echo paginate_links( 
    [
        \'base\'         => \'%_%\',
        \'total\'        => $query->max_num_pages,
        \'current\'      => $current,
        \'format\'       => \'?p-page=%#%\',
        \'show_all\'     => false,
        \'type\'         => \'plain\',
        \'end_size\'     => 2,
        \'mid_size\'     => 1,
        \'prev_next\'    => true,
        \'prev_text\'    => \'<i></i> <i class="icon-chevron-left"></i>\',
        \'next_text\'    => \'<i class="icon-chevron-right"></i> <i></i>\',
        \'add_args\'     => false,
        \'add_fragment\' => \'\',
    ]
);
我们使用的地方:

$current   = max( 1, (int) filter_input( INPUT_GET, \'p-page\' ) );
这也将进入WP_Query 的参数$query:

\'paged\' => $current,
的输出示例?p-page=6 :

<a class="prev page-numbers" href="?p-page=5"><i></i> <i class="icon-chevron-left"></i></a>
<a class=\'page-numbers\' href=\'\'>1</a>
<a class=\'page-numbers\' href=\'?p-page=2\'>2</a>
<span class="page-numbers dots">&hellip;</span>
<a class=\'page-numbers\' href=\'?p-page=5\'>5</a>
<span class=\'page-numbers current\'>6</span>
<a class=\'page-numbers\' href=\'?p-page=7\'>7</a>
<span class="page-numbers dots">&hellip;</span>
<a class=\'page-numbers\' href=\'?p-page=99\'>99</a>
<a class=\'page-numbers\' href=\'?p-page=100\'>100</a>
<a class="next page-numbers" href="?p-page=7"><i class="icon-chevron-right"></i> <i></i></a>
附言:没有必要sprintf 组合两个静态字符串,正如我们在prev_textnext_text. 目前,该部分在原始代码段中看起来是错误的,因此我将其删除。

希望有帮助!

结束

相关推荐

Query post Pagination Problem

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