我在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
。
答案 0 :(得分:1)
您可以使用
'products(?:/([a-zA-Z0-9]+))?/?$'
或者如果此部分始终位于开头,请添加^
:
'^products(?:/([a-zA-Z0-9]+))?/?$'
请注意+
周围形成第1组的(...)
和[a-zA-Z0-9]+
个括号,其值将通过$matches[1]
使用。