我生成的分页链接结果将包含其他#038;
在url中,我可以知道如何删除它吗?
<小时/>Blog page url :http://localhost/wordpress/blog/
我已经用函数设置了分页paginate_links, 当我按第[2]页时:
Blog page Page 2 url :http://localhost/wordpress/blog/page/2/
(以上一切正常)
但是,每当我的博客页面URL有某些参数用于我的WP\\U查询筛选/排序时,paginate\\u链接结果将有额外的参数,请参阅下面的URL
Blog page with Params Url :http://localhost/wordpress/blog/?filter=23&orderby=oldest
Blog page with Params Page 2 Url : http://localhost/wordpress/blog/page/2/?filter=23&orderby=oldest#038;orderby=oldest
我需要实现的URL是http://localhost/wordpress/blog/page/2/?filter=23&orderby=oldest
以下是我的分页链接功能:
global $wp_query;
$big = 99999999999;
paginate_links([
\'base\' => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),
\'format\' => \'?paged=%#%\',
\'prev_text\' => __(\'<\'),
\'next_text\' => __(\'>\'),
\'current\' => max( 1, get_query_var(\'paged\') ),
\'type\' => \'list\',
\'total\' => $wp_query->max_num_pages,
]);
最合适的回答,由SO网友:Sally CJ 整理而成
无需两次转义URL-get_pagenum_link()
默认情况下,返回转义URL&mdash;当第二个参数为true
, esc_url()
使用;其他的esc_url_raw()
使用时间:
带esc_url()
: http://localhost/wordpress/blog/?filter=23&orderby=oldest
带有esc_url_raw()
: http://localhost/wordpress/blog/?filter=23&orderby=oldest
And the problem occurs when the base
contains ?
, or a query string, and that the URL is escaped (e.g. using esc_url()
).
因为
esc_url()
转换
&
(与号)到其HTML实体,即
&
, 当
base
包含查询字符串,
paginate_links()
将分析
base
值/URL,以及
&
都逃了出来
&
和最近的
=
被视为查询字符串名称,并添加到
base
\'s查询字符串:
http://localhost/wordpress/blog/?filter=23&orderby=oldest#038;orderby=oldest
在上面的示例中,URL是这样的,因为
paginate_links()
(或者更准确地说,
wp_parse_str()
used 在里面
paginate_links()
) 已解释
#038;orderby
作为
oldest
; i、 e。
#038;orderby=oldest
&mdash;应该是这样的
&orderby=oldest
钥匙在哪里
orderby
.
(当然,浏览器在#
作为URL片段。如果你点击链接,在下一页,$_GET
将没有的条目#038;orderby
; i、 e。$_GET[\'#038;orderby\']
不存在。)
So here are several ways to fix/avoid the problem:
使用html_entity_decode()
就像WordPress一样does 通过paginate_links()
:\'base\' => str_replace( $big, \'%#%\', html_entity_decode( get_pagenum_link( $big ) ) )
打电话时get_pagenum_link()
, 将第二个参数设置为false
:\'base\' => str_replace( $big, \'%#%\', get_pagenum_link( $big, false ) )
使用str_replace()
更换&
具有&
:\'base\' => str_replace( [ $big, \'&\' ], [ \'%#%\', \'&\' ], get_pagenum_link( $big ) )
不要担心无法逃脱
base
因为
paginate_links()
实际转义返回结果中的所有链接/URL。
友好警告:此答案中的一些链接指向一个巨大的HTML文件/网页
SO网友:Krzysiek Dróżdż
看起来这是一个known issue 具有paginate_links
作用
这里有一个快速的解决方法,只要查询参数值中没有符号,它就会很好地工作:
<?php
global $wp_query;
$big = 99999999999;
echo paginate_links(array(
\'base\' => str_replace( array($big, \'#038;\'), array(\'%#%\', \'\'), esc_url( get_pagenum_link( $big ) ) ),
\'format\' => \'?paged=%#%\',
\'prev_text\' => __(\'<\'),
\'next_text\' => __(\'>\'),
\'current\' => max( 1, get_query_var(\'paged\') ),
\'type\' => \'list\',
\'total\' => $wp_query->max_num_pages,
));
?>