ADD_REWRITE_RULE中的正则表达式问题

时间:2011-02-12 作者:TomvB

我正在为WP 3.1中名为articles的自定义帖子类型创建一个分类页面,在提取页码时遇到了一些问题。

url:/articles/category/background/

目前,我的functions.php:

add_action( \'init\', \'wpse7379_init\' );
function wpse7379_init() {
    add_rewrite_rule(
        \'articles/category/([^/]+)(/page/([0-9]+))/?$\',
        \'index.php?post_type=articles&category_name=$matches[1]&paged=$matches[2]\',
        \'top\'
    );
}
这会在内部将url重写为:/index.php?post_type=articles&category_name=background

我试图通过扩展重写规则来实现分页,但它对我不起作用。

分页工作如下:/articles/category/background/page/2/

新规则:

add_rewrite_rule(
    \'articles/category/([^/]+)(/page/([0-9]+))/?$\',
    \'index.php?post_type=articles&category_name=$matches[1]&paged=$matches[2]\',
    \'top\'
);
这应将url重写为:/index.php?post_type=articles&category_name=background&paged=2

我在我的archive-articles.php 页面,但只是categories.php 页面,其中显示帖子。

当我尝试时/index.php?post_type=articles&category_name=background&paged=2 它可以工作,但被重写的url不能工作。它只显示第一页,不管我输入的页码是多少。

有人知道如何解决这个问题吗?I think I\'m looking for a proper regex, I kinda suck at regexes, so I guess thats the problem.

1 个回复
最合适的回答,由SO网友:Jan Fabry 整理而成

我发现你的重写规则有三个问题。

页码是第三个捕获组,而不是第二个捕获组。您计算每个开口(, 第一个是类别名称,第二个是/page/[0-9]+, 第三个只是[0-9]+ 你需要。因此,请更改paged 参数到$matches[3].? 最后(这就是我们把它放在一个组中的原因)/fruit/banana/. 因此,您不应该将它们与[^/]+ (斜杠除外的任何字符),但.+? (任何字符,但非贪婪,以便正则表达式的其余部分仍然可以匹配)这将导致以下重写规则:

add_rewrite_rule(
    \'articles/category/(.+?)(/page/([0-9]+))?/?$\',
    \'index.php?post_type=articles&category_name=$matches[1]&paged=$matches[3]\',
    \'top\'
);
如果您还没有使用它,我建议您使用我的rewrite analyzer. 您可以实时测试它们,并查看查询值是什么。

结束

相关推荐

WordPress删除wp_List_Categories中最后一项的分隔符

我正在尝试删除最后一个分隔符(通常是<br/> 标记,但我将其从wp\\u list\\u categories的最后一个链接更改为“/”)。基本上我想要这个:类别1//类别2//类别3//看起来像这样:类别1//类别2//类别3以下是我当前使用的代码:<?php $cat_array = array(); $args = array( \'author\' => get_the_author_meta(\'id\'),&#x