我在分页方面遇到了严重且完全无法解决的问题。
但是我确实注意到了这个有趣的点:
我搜索“可爱”这样的关键字:
?s=cute&submit=Search&post_type=image&paged=2
...是链接指向的位置。 "Paged=" 在随机页面上给出 404。但是如果我将 URL 修改为 page=
?s=cute&submit=Search&post_type=image&page=2
每个页面目标都有效,给我带来快乐,但分页选项卡列表始终停留在 0(不反射(reflect)当前页面)。
我感觉我正在用代码和设置玩“骗局游戏”,wordpress 迷惑了我。
问题简化为:
如何在每种情况下都输出 &page=
?相反,如果 &paged=
应该是这样,我如何让它在没有 404 的情况下工作?!?!
这个问题我已经处理了近三个月了。人们羞于回答。
更新:
尝试处理 URL 中破坏分页的 paged
变量,我创建了一个过滤器,将其简单地替换为 page
。
function symbiostock_pagination_mod( $args ){
$args = str_replace('paged=', 'page=', $args);
return $args;
}
add_filter( 'paginate_links', 'symbiostock_pagination_mod', 1 );
看起来是个好主意!但每次新的点击都会发生这种情况:
?s=cute&post_type=image&page=2&page=2
?s=cute&post_type=image&page=2&page=3
那么这是在哪里修改的,为什么?
更新:
我不确定我是否是唯一一个遇到过这个问题的人,但我确实解决了这个问题(至少对我自己来说),您可以看到下面的解决方案。也感谢您给予的帮助。 :D
最佳答案
所以这就是我想出的...我们不妨将其称为黑客或解决方法,因为尚不清楚这是否确实是一个错误,我正在处理(来自 WordPress 本身)或只是我的主题代码中完全隐藏的问题。
以下函数过滤“paginate_links()
”函数并实现此目的:
我看到
paged
变量在搜索页面上随机生成 404,但在存档和分类上运行良好em> 页面。所以,我们检查一下。if_search()
,我们进行更改...如果这是一个搜索,我们使用正则表达式获取可能的页面 # 目的地(或者简单地将
paged
字符串替换为page
,具体取决于永久链接结构) . 我们使用remove_query_var()
删除错误变量,并使用add_query_var()
放置工作变量。这样做是因为在这种奇怪的情况下,
page
总是生成正确的结果。然后我们返回编辑后的目标链接,一切就都美好了。
函数如下:
add_filter( 'paginate_links', 'my_search_pagination_mod', 1 );
function my_search_pagination_mod( $link )
{
if ( is_search() ) {
$pattern = '/page\/([0-9]+)\//';
if ( preg_match( $pattern, $link, $matches ) ) {
$number = $matches[ 1 ];
$link = remove_query_arg( 'paged' );
$link = add_query_arg( 'page', $number );
} else {
$link = str_replace( 'paged', 'page', $link );
}
}
return $link;
}
还要感谢我使用正则表达式得到的一些帮助:PHP Regular Expression Help: A quick way to extract the 2 from "page/2/"
关于wordpress - paginate_links() 输出 "paged="进行链接,而不是 "page=",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16160865/