wordpress - paginate_links() 输出 "paged="进行链接,而不是 "page="

标签 wordpress function pagination http-status-code-404

我在分页方面遇到了严重且完全无法解决的问题。

但是我确实注意到了这个有趣的点:

我搜索“可爱”这样的关键字:

?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()”函数并实现此目的:

  1. 我看到 paged 变量在搜索页面上随机生成 404,但在存档分类上运行良好em> 页面。所以,我们检查一下。 if_search(),我们进行更改...

  2. 如果这是一个搜索,我们使用正则表达式获取可能的页面 # 目的地(或者简单地将 paged 字符串替换为 page,具体取决于永久链接结构) . 我们使用 remove_query_var() 删除错误变量,并使用 add_query_var() 放置工作变量。

    这样做是因为在这种奇怪的情况下,page 总是生成正确的结果。

  3. 然后我们返回编辑后的目标链接,一切就都美好了。

函数如下:

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/

相关文章:

复选框状态在剑道网格分页时消失

javascript - AJAX 页面转换后 Woocommerce 功能被禁止

css - IE 8 背景颜色不稳定

MySQL 搜索和替换以替换未使用的短代码

javascript - 如何将 id 传递给 jquery 中的函数?

javascript - 函数 toLowerCase 损坏

javascript - .addClass Javascript 代码未正确执行 - WordPress 网站

php - 自动加载函数最佳实践

php - Laravel 5.2 分页

javascript - 如何实现页面计数器?