Rewrite rule not matching

时间:2017-11-29 作者:Kyle Tripp

我创建了重写规则

add_rewrite_rule("^user/(\\d+)/(myaccount)/?", \'index.php?pagename=$matches[2]&user_id=$matches[1]\',\'top\');
所以当用户访问示例时。com/user/123/myaccount/it应该使用带有slug“myaccount”的wordpress页面,并将“123”作为用户id传递。

我已经刷新了重写规则,我正在使用Monkeyman重写分析器进行检查,但它似乎与该模式不匹配。

有人能指出我做错了什么吗?

2 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

我根据我的评论对建议进行了测试,结果奏效了。

从中拆下支架(myaccount) 和更改$matches[2] 在URL中myaccount:

function wpse_287203_rewrite_rule() {
    add_rewrite_rule( \'^user/(\\d+)/myaccount/?\', \'index.php?pagename=myaccount&user_id=$matches[1]\', \'top\' );
}
add_action( \'init\', \'wpse_287203_rewrite_rule\' );
(myaccount) 将无法匹配整个世界。这有点复杂。看见this Stack Overflow answer 了解如何匹配精确的单词。但是,我们不需要在这里这样做,因为我们可以手动将单词放入add_rewrite_rule().

此外,这不是问题的一部分,但这是接下来的问题。访问user_id, 您需要将其添加到有效查询变量列表中:

function wpse_287203_query_vars( $vars ) {
  $vars[] = \'user_id\';

  return $vars;
}
add_filter( \'query_vars\', \'wpse_287203_query_vars\' );
现在,您可以使用get_query_var():

$user_id = get_query_var( \'user_id\' );
$userdata = get_userdata( $user_id );

SO网友:hashtagerrors

您的重写规则user/(\\d+)/(myaccount)/ 由于正斜杠而出错。在正则表达式中,“/”是一个需要转义的特殊字符,可以通过添加反斜杠(/)来转义。因此,您的重写规则可能如下所示:

^user\\/(\\d+)\\/(myaccount)\\/?
我希望这能解决你的问题。

结束

相关推荐

Virtual Pages plugins

我很难让插件正常工作Virtual Pages (WordPress插件可简化虚拟页面的创建)我确实进行了编辑,根据查询创建了一个循环。add_action( \'gm_virtual_pages\', function( $controller ) { /* Creating virtuals pages for companies */ $args = array( \'post_type\' => array(\'companies\',), \'post_status\'