这是设置。
我有一个自定义的帖子类型“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\' );
最合适的回答,由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\' );