web-dev-qa-db-fra.com

La règle de réécriture ne correspond pas

J'ai créé la règle de réécriture

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

Ainsi, lorsqu'un utilisateur visite example.com/user/123/myaccount/, il doit utiliser la page wordpress avec la mention slug 'myaccount' et transmettre '123' en tant que user_id.

J'ai effacé mes règles de réécriture et j'utilise Monkeyman Rewrite Analyzer pour vérifier, mais cela ne semble pas correspondre à ce modèle.

Quelqu'un peut-il signaler ce que je fais mal?

1
Kyle Tripp

J'ai testé la suggestion de mon commentaire et cela a fonctionné.

Supprimez les crochets de (myaccount) et remplacez $matches[2] dans l'URL par 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) ne correspondra pas à un monde entier. C'est un peu plus impliqué. Voir cette réponse de débordement de pile pour savoir comment faire correspondre un mot exact. Cependant, nous n’avons pas besoin de le faire ici, car nous pouvons simplement insérer manuellement Word dans le deuxième argument de add_rewrite_rule().

En outre, cela ne faisait pas partie de la question, mais c'est ce qui va suivre. Pour avoir accès au user_id, vous devez l'ajouter à la liste des variables de requête valides:

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

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

Vous pouvez maintenant obtenir l'ID utilisateur lorsque vous utilisez l'URL avec get_query_var():

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