WordPress 404 wurde nicht gefunden, nachdem der Link zum Autor neu geschrieben wurde

Ich möchte den Standard-WordPress-Autoren-Link (der / author / user_nicename) zu / author / user_id ändern.

Und ich fand es leicht, das zu tun, das habe ich auf zwei Arten erreicht:

get_author_posts_url() kopiere einfach die function get_author_posts_url() von wp-includes/author-template.php und schreibe sie in mein Theme:

 function ji_get_user_url($author_id, $author_nicename = '') { global $wp_rewrite; $auth_ID = (int) $author_id; $link = $wp_rewrite->get_author_permastruct(); if ( empty($link) ) { $file = home_url( '/' ); $link = $file . '?author=' . $auth_ID; }else { if ( '' == $author_nicename ) { $user = get_userdata($author_id); if ( !empty($user->user_nicename) ) $author_nicename = $author_id; } $link = str_replace('%author%', $author_id, $link); $link = home_url( user_trailingslashit( $link ) ); } $link = apply_filters( 'author_link', $link, $author_id, $author_nicename ); return $link; } 

2.Ich habe den Filter benutzt:

 function chang_author_link($link,$author_id,$author_nicename){ $user_info = get_userdata(get_current_user_id()); $user_id= $user_info->ID; $link = str_replace($author_nicename, $user_id, $link); return $link; } add_filter('author_link', 'chang_author_link',10,3); 

In beiden Fällen oben kann der Standard-Autor-Link erfolgreich zu “/ author / user_id” geändert werden, aber alle haben eine 404 nicht gefundene Seite zurückgegeben!

Was ist passiert?

Solutions Collecting From Web of "WordPress 404 wurde nicht gefunden, nachdem der Link zum Autor neu geschrieben wurde"

Die function get_author_posts_url ruft die URL ab, in der sich die Posts eines bestimmten Autors befinden. Wenn Sie die URL ändern, bedeutet dies nicht, dass die Posts verschoben werden.

Mit anderen Worten, Sie haben ein Schild bewegt, das Sie zum Buckingham Palace führt und erwarten, dass Sie damit auch den Palast verlegt haben. In der Tat, wie Sie herausgefunden haben, landen Sie in der Mitte von Nirgendwo.

author_link , dass die Änderung auch für Aufrufe in anderen functionen gilt, da Sie den vorhandenen Filter ” author_link . Wenn Sie einen Filter auf eine benutzerdefinierte function anwenden möchten, ist es besser, einen benutzerdefinierten benannten Filter zu definieren.

Ich habe das Rätsel selbst getriggers.

Die Wahrheit ist, es ist wirklich schwer, den Autor-Link direkt zu ändern, indem man den Autoren-Slug durch eine Autor-ID ersetzt. Genau wie @cjbj sagte:

Sie haben ein Schild bewegt, das Sie zum Buckingham Palace führt und erwarten, dass Sie damit auch den Palast verlegt haben.

Wir müssen dieses Problem auf andere Weise angehen.

In der Standardeinstellung wordpress / user_nicename / als Slug oder? Also behalten wir die Art wie es ist aber ändern den “Inhalt” von user_nicename. Mit anderen Worten, wir machen die user_id zum user_nicename.

Machen Sie also eine Sache, wenn ein neuer Benutzer kommt:

 wp_update_user(array('user_nicename' => $user_id)) 

Alles erledigt!