Ändern Sie den Author Slug von Username in Nickname

13

Hallo an die Community,
ist es möglich, den Standard-Benutzernamen slug in nickname zu ändern, falls verfügbar?

Standardmäßig lautet die URL wie folgt : http: //domain.tld/author/ (admin ). Kann
sie umgeschrieben und in http: //domain.tld/author/ (Spitzname ) geändert werden , wenn ein Benutzer seinen Spitznamen ändert ? Von der Profilseite ändert sich der Slug auch in den neuen Namen, den der Benutzer vergeben hat.

Vielen Dank!
Philip

Philip
quelle
Ich glaube nicht, dass dies realistisch ist. Es gibt keine query_var, die Beiträge basierend auf dem Spitznamen eines Benutzers findet. Daher gibt es keine geeignete Variable, um den Spitznamen in einer Umschreiberegel zuzuordnen. Sie müssten Ihre eigene Abfrage-Variablen-Behandlung hinzufügen, um mit Kurznamen-Abfragen neben jedem Umschreibungscode umzugehen (theoretisch ist dies möglich, aber ich denke nicht, dass es in der Praxis elegant wäre).
22.

Antworten:

16

Ich sehe zwei Möglichkeiten, um dieses Problem zu lösen: Ändern der Daten, die die Autoren-URL bilden, oder Ändern der Autoren-URL. Sie sollten wahrscheinlich auch Weiterleitungen behandeln, damit alte URLs zu Benutzerarchiven weiterhin funktionieren, wenn ein Benutzer seinen Kurznamen ändert.

Ändern der Autoren-URL

Diese Frage besteht aus zwei Teilen: Behandeln Sie eingehende Links mit dem Spitznamen des Autors anstelle des Autor-Slugs und generieren Sie Autoren-Post-URLs mit dem Spitznamen anstelle des Standard-Slugs.

Der erste Teil wird gelöst, indem Sie sich in den requestFilter einhängen, prüfen, ob es sich um eine Autorenanfrage handelt, und den Autor anhand des Spitznamens anstelle des Slugs suchen. Wenn wir einen Autor finden, ändern wir die Abfrageparameter, um die Autoren-ID zu verwenden.

add_filter( 'request', 'wpse5742_request' );
function wpse5742_request( $query_vars )
{
    if ( array_key_exists( 'author_name', $query_vars ) ) {
        global $wpdb;
        $author_id = $wpdb->get_var( $wpdb->prepare( "SELECT user_id FROM {$wpdb->usermeta} WHERE meta_key='nickname' AND meta_value = %s", $query_vars['author_name'] ) );
        if ( $author_id ) {
            $query_vars['author'] = $author_id;
            unset( $query_vars['author_name'] );    
        }
    }
    return $query_vars;
}

Der zweite Teil erfolgt, indem Sie sich in den author_linkFilter einhängen und den (durch gekennzeichneten $author_nicename) Standardautorteil durch den Spitznamen ersetzen .

add_filter( 'author_link', 'wpse5742_author_link', 10, 3 );
function wpse5742_author_link( $link, $author_id, $author_nicename )
{
    $author_nickname = get_user_meta( $author_id, 'nickname', true );
    if ( $author_nickname ) {
        $link = str_replace( $author_nicename, $author_nickname, $link );
    }
    return $link;
}

Ändern der Daten, die die Autoren-URL bilden

Eine vielleicht einfachere Möglichkeit wäre, das ansonsten nicht verwendete user_nicenameFeld in der Datenbank zu aktualisieren . Ich denke, es wird aus der Benutzeranmeldung generiert und danach nie mehr geändert. Ich bin jedoch kein Experte in der Benutzerverwaltung. Verwenden Sie diese also auf eigenes Risiko.

add_action( 'user_profile_update_errors', 'wpse5742_set_user_nicename_to_nickname', 10, 3 );
function wpse5742_set_user_nicename_to_nickname( &$errors, $update, &$user )
{
    if ( ! empty( $user->nickname ) ) {
        $user->user_nicename = sanitize_title( $user->nickname, $user->display_name );
    }
}
Jan Fabry
quelle
Gute Lösung. Ich habe es noch nicht überprüft, aber ich denke, Ihr Ansatz ist wirklich gut.
Anh Tran
Was ist mit doppelten Autorennamen? Müssen wir uns darüber Sorgen machen oder kümmert sich WP darum?
Drew Baker
Wie @DrewBaker sagte, könnte es ein Problem mit doppelten URLs geben, wenn zwei Benutzerprofile ähnliche Namen haben. Angenommen, ein Benutzer 1 hat seinen Benutzernamen als John bearbeitet und es gibt einen anderen Benutzer mit einem ähnlichen Namen. Beide Benutzerprofile haben die URL eines einzelnen Autors: site.com/author/john. Können Sie mir sagen, ob es dafür eine Lösung gibt?
Netizen
Auch wenn zwischen dem Namen ein Leerzeichen steht, funktioniert die URL nicht. Dies geschieht mit den zufälligen Benutzernamen, die mit diesem Code erstellt wurden. Als ich den Code ausprobiert habe, werden zufällige Benutzernamen wie Neuer Benutzer 654937 und die URL des Autors wie site.com/author/Newuser654937/ generiert. Diese URL funktioniert erst, wenn wir den Profilnamen erneut ändern und die Leerzeichen entfernen. Gibt es Kannst du eine Lösung dafür vorschlagen?
Netizen
@IamSJ: Es gibt keine automatische Verhinderung von doppelten Namen oder ungültigen Zeichen. Das müssen Sie selbst besorgen. Wahrscheinlich am einfachsten, wenn Sie es über den zweiten Weg tun, indem Sie den "nicename" ändern.
Jan Fabry
-3

Ein einfacher Weg ist das Plugin Author Slug

Sie können auch kleinen Code verwenden:

add_action('init', 'set_new_author_base');
function set_new_author_base() {
    global $wp_rewrite;
    $author_slug = 'new_slug';
    $wp_rewrite->author_base = $author_slug;
}
bueltge
quelle
3
Es ist nicht die Autorenbasis, die der Benutzer leider ändern möchte.
22.