Regel neu schreiben, die nicht übereinstimmt

Ich habe die Rewrite-Regel erstellt

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

Wenn ein Benutzer also example.com/user/123/myaccount/ besucht, sollte er die WordPress-Seite mit dem Slug ‘myaccount’ verwenden und ‘123’ als Benutzer-ID übergeben.

Ich habe meine Rewrite-Regeln gelöscht, und ich verwende Monkeyman Rewrite Analyzer, um zu überprüfen, aber es scheint nicht zu diesem Muster zu passen.

Kann jemand darauf hinweisen, was ich falsch mache?

Solutions Collecting From Web of "Regel neu schreiben, die nicht übereinstimmt"

Ich habe den Vorschlag aus meinem Kommentar getestet und es hat funktioniert.

Entfernen Sie die Klammern von (myaccount) und ändern Sie $matches[2] in der URL zu 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) wird nicht einer ganzen Welt entsprechen. Das ist ein bisschen komplizierter. In dieser Stack-Overflow-Antwort finden Sie Informationen dazu, wie Sie ein genaues Wort finden. Das müssen wir hier allerdings nicht tun, da wir das Wort einfach manuell in das zweite Argument von add_rewrite_rule() .

Es war auch nicht Teil der Frage, aber es kommt, was als nächstes kommt. Um Zugriff auf die user_id , müssen Sie sie zur Liste der gültigen user_id hinzufügen:

 function wpse_287203_query_vars( $vars ) { $vars[] = 'user_id'; return $vars; } add_filter( 'query_vars', 'wpse_287203_query_vars' ); 

Jetzt können Sie die Benutzer-ID get_query_var() wenn Sie mit get_query_var() auf dieser URL sind:

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

Ihre Rewrite-Regel user/(\d+)/(myaccount)/ hatte einen Fehler wegen Schrägstrichen. In regulären Ausdrücken ist “/” ein Sonderzeichen, das maskiert werden muss. Dies können Sie tun, indem Sie einen umgekehrten Schrägstrich (/) hinzufügen. Ihre Rewrite-Regel könnte also etwa so aussehen:

 ^user\/(\d+)\/(myaccount)\/? 

Ich hoffe, das triggers dein Problem.