Wordpress Rewrite_Rule允许'/ page / value'

时间:2016-09-01 20:30:23

标签: php regex wordpress mod-rewrite

我在Wordpress上有一个名为'all-products'的页面,我想在网址中使用id domain.com/all-products/4382zcxs2133

获取产品
function add_my_var($public_query_vars) {
    $public_query_vars[] = 'routeparam';
    return $public_query_vars;
}

add_filter('query_vars', 'add_my_var');

function do_rewrite() {
    add_rewrite_rule('all-products/[a-zA-Z0-9]/?$', 'index.php?pagename=all-products&routeparam=$matches[1]','top');
}

add_action('init', 'do_rewrite');

然后,当我尝试使用$wp_query->query_vars['routeparam']时,它会显示“未定义的索引”。

当我var_dump($wp_query->query_vars)时,我实际上可以在名为page的索引中看到该值,但这仅适用于数字。如果我改用字母和数字,我会收到404错误。

编辑:

/all-products/213213 - 作品

/all-products/ - 作品

/all-products/21321dsa3fsa - 无效

我在小提琴上尝试使用正则表达式,但它有效,但在add_rewrite_rule的Wordpress上,它不起作用。 Here is the fiddle

编辑2:

我已经注释掉了我的写规则行,看起来它仍然可以访问product/123所以不知怎的,我的重写规则没有注册。

我尝试了var_dump($wp_rewrite)我可以确认我的重写规则已经注册,但我相信默认的wordpress分页('pagination_base'确切地说)可能会导致这种情况。

因为当我注释掉添加写入规则并通过/all-products/123访问网址时,我仍然可以访问没有404的网页,我可以看到我提供的“123”值显示为“页面” $wp_query->query_vars

1 个答案:

答案 0 :(得分:1)

您可以使用

'products(?:/([a-zA-Z0-9]+))?/?$'

或者如果此部分始终位于开头,请添加^

'^products(?:/([a-zA-Z0-9]+))?/?$'

请注意+周围形成第1组的(...)[a-zA-Z0-9]+个括号,其值将通过$matches[1]使用。

Do not forget to flush and regenerate the rewrite rules database after modifying rules. From WordPress Administration Screens, Select Settings -> Permalinks and just click Save Changes without any changes.