为什么重写规则不起作用?

时间:2014-09-09 作者:yoxalld

这是设置。

我有一个自定义的帖子类型“businesss”。我有一个自定义分类“显示类别”。我还有第二个自定义分类“过滤器”

这两种分类法都设置为与自定义帖子类型一起使用。

我正在尝试获取如下url结构

www.domain。com/业务/显示类别术语/筛选术语

显示类别只有三种可能的选择,即吃、住和玩。过滤器有很多选择。这是我到目前为止的重写规则,但它不起作用,我不知道为什么。

function test_add_rewrite_rules() {

    global $wp_rewrite;

    $new_rules = array(
        \'businesses/(eat|stay|play)/(.+)/?$\' => \'index.php?post_type=businesses&display_category=\' . $wp_rewrite->preg_index(1) . \'&filters=\' . $wp_rewrite->preg_index(2),
        \'businesses/(eat|stay|play)/?$\' => \'index.php?post_type=businesses&display_category=\' . $wp_rewrite->preg_index(1)

    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}

add_action( \'generate_rewrite_rules\', \'test_add_rewrite_rules\' );
我正在使用重写规则检查器插件,因此我知道规则正在添加。但他们没有归还我想要的页面。我找到这篇关于rewrite rules 它帮助我走了这么远,但我现在陷入了困境。任何帮助都将不胜感激!

更新上述代码,但使用add\\u rewrite\\u rule函数。我现在已经连接到init,因为generate\\u rewrite\\u rules挂钩启动得太晚,无法保存新规则。我还意识到,我需要让页面规则也起作用,但我不知道如何做到这一点。

function test_add_rewrite_rules() {

    global $wp_rewrite;

    add_rewrite_rule(\'businesses/(eat|stay|play)/(.+)/?$\', \'index.php?post_type=businesses&display_category=$matches[1]&filters=$matches[2]\', \'top\');
    add_rewrite_rule(\'businesses/(eat|stay|play)/?$\', \'index.php?post_type=businesses&display_category=$matches[1]\', \'top\');

}

add_action( \'init\', \'test_add_rewrite_rules\' );

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

您必须使您的重写规则考虑paged 参数,否则它们不会。它看起来有点像下面所示。

function test_add_rewrite_rules() {
    add_rewrite_rule(
        \'businesses/(eat|stay|play)/(.+)/page/([0-9]+)/?$\',
        \'index.php?post_type=businesses&display_category=$matches[1]&filters=$matches[2]&paged=$matches[3]\',
        \'top\'
    );
    add_rewrite_rule(
        \'businesses/(eat|stay|play)/page/([0-9]+)/?$\',
        \'index.php?post_type=businesses&display_category=$matches[1]&paged=$matches[2]\',
        \'top\'
    );
}
add_action( \'init\', \'test_add_rewrite_rules\' );

结束

相关推荐