Wordpress - 带有可选参数的自定义重写规则

时间:2015-04-12 15:15:02

标签: regex wordpress rewrite

我有以下重写规则:

add_action('init', 'custom_rewrite_rule', 10, 0);
function custom_rewrite_rule() {
    add_rewrite_rule('^add/([^/]*)/([^/]*)/?','index.php?page_id=2436&type=$matches[1]&parent_id=$matches[2]','top');
}

add_filter('query_vars', 'foo_my_query_vars');
function foo_my_query_vars($vars){
    $vars[] = 'type';
    $vars[] = 'parent_id';
    return $vars;
}

如果我转到mydomain.com/add/post/12345,页面会正确显示,我会通过get_query_var获取变量。

但是,网址的最后一部分是可选的。如果我只去mydomain.com/add/post/,我就找不到404。

我应该如何更改正则表达式以支持可选的最后一个参数?

3 个答案:

答案 0 :(得分:2)

一个简单的解决方案是添加另一条规则:

function custom_rewrite_rule() {
    add_rewrite_rule('^add/([^/]*)/([^/]*)/?','index.php?page_id=2436&type=$matches[1]&parent_id=$matches[2]','top');
    add_rewrite_rule('^add/([^/]*)/?','index.php?page_id=2436&type=$matches[1]','top');
}

答案 1 :(得分:0)

您可以尝试使用以下正则表达式,

add\/post\/(\d+)?

Working Demo

答案 2 :(得分:0)

旧的但可能有用 - 请尝试以下模式:

function custom_rewrite_rule() {
    add_rewrite_rule('^add/([^/]*)/?([^/]*)?','index.php?page_id=2436&type=$matches[1]&parent_id=$matches[2]','top');
}

在这种情况下,parent_id将设置为空字符串。

我的WP插件中有类似的模式,它们按预期工作。