web-dev-qa-db-ja.com

書き換えルールが一致しません

書き換えルールを作成しました

add_rewrite_rule("^user/(\d+)/(myaccount)/?", 'index.php?pagename=$matches[2]&user_id=$matches[1]','top');

そのため、ユーザーがexample.com/user/123/myaccount/にアクセスすると、スラッグ 'myaccount'を含むワードプレスページを使用し、user_idとして '123'を渡す必要があります。

書き換えルールをフラッシュし、Monkeyman Rewrite Analyzerを使用してチェックしていますが、そのパターンと一致していないようです。

誰が私が間違っていることを指摘できますか?

1
Kyle Tripp

私は私のコメントから提案をテストしました、そしてそれはうまくいきました。

(myaccount)から括弧を削除し、URLの$matches[2]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)は全世界と一致しません。それはもう少し複雑です。正確なWordに一致する方法については、 このスタックオーバーフローの答え を参照してください。手動でWordをadd_rewrite_rule()の2番目の引数に入れることができるので、ここでそれを行う必要はありません。

また、それは問題の一部ではありませんでした、しかしそれは次に来るものです。 user_idにアクセスするには、それを有効なクエリ変数のリストに追加する必要があります。

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

  return $vars;
}
add_filter( 'query_vars', 'wpse_287203_query_vars' );

そのURLでget_query_var()を使ってユーザーIDを取得することができます。

$user_id = get_query_var( 'user_id' );
$userdata = get_userdata( $user_id );
1
Jacob Peattie