【问题标题】:paginate_links() outputs "paged=" to link instead of "page="paginate_links() 输出“paged=”链接而不是“page=”
【发布时间】:2013-04-16 04:00:19
【问题描述】:

我一直遇到严重且完全无法解决的分页问题。

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

我搜索了一个关键词,比如可爱:

?s=cute&submit=Search&post_type=image&paged=2

...是链接指向的地方。 "Paged=" 在随机页面上给出 404。但是,如果我将 URL 修改为 page=

?s=cute&submit=Search&post_type=image&page=2

每个页面目标都有效,让我心生欢喜,但分页标签列表始终停留在 0(不反映当前页面)。

我觉得我在玩一个有代码和设置的“空壳游戏”,wordpress 迷惑了我。

问题简化为:

如何在每种情况下都输出&page=?相反,如果 &paged= 应该是它的方式,我如何让它在没有 404 的情况下工作?!?!

这是一个我已经处理了将近 3 个月的问题。人们羞于回答。


更新:

为了处理 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 function pagination http-status-code-404


    【解决方案1】:

    所以这就是我想出的...我们不妨称它为 hackwork-around 因为它不知道这是否确实是我的错误正在处理(来自 wordpress 本身)或者只是我的主题代码中完全隐藏的问题。

    下面的函数过滤了'paginate_links()'函数并实现了这个:

    1. 我看到 paged 变量在 search 页面上随机生成 404,但在 archivetaxonomy 页面上工作正常。所以,我们检查一下。 if_search(),我们进行更改...

    2. 如果这是一个搜索,我们使用正则表达式(或简单地将paged 字符串替换为page,具体取决于永久链接结构。我们使用remove_query_var() 删除错误变量,并使用@ 987654328@ 把工作的那个。

      这样做是因为在这种奇怪的情况下,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/"

    【讨论】:

    • 我删除了我的答案并赞成你的问题和答案。有一天我可能需要使用你的这个技巧:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 2011-06-01
    相关资源
    最近更新 更多