1

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

然而,我确实注意到了这个有趣的观点:

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

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

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

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

每个页面目标都有效,给我带来快乐,但分页选项卡列表始终停留在 0(不反映当前页面)。

我觉得我在玩一个带有代码和设置的“shell 游戏”,而 wordpress 让我迷惑不解。

问题简化为:

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

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


更新:

为了处理pagedURL 中破坏分页的变量,我创建了一个过滤器来简单地将其替换为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

4

1 回答 1

2

所以这就是我想出的……我们不妨称它为hack变通方法,因为它不知道这是否确实是我正在处理的错误(来自 wordpress 本身)或者只是我的一个完全隐藏的问题主题的代码。

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

  1. 我看到变量在搜索paged页面上随机生成 404 ,但在存档分类页面上工作正常。所以,我们检查一下。,我们做我们的改变...if_search()

  2. 如果这是一次搜索,我们会使用正则表达式(或简单地将字符串替换pagedpage,具体取决于永久链接结构)获得可能的页面 # 目标。我们使用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 正则表达式帮助:从“page/2/”中提取 2 的快速方法

于 2013-04-26T02:23:44.607 回答