it-swarm.com.de

Ändern Sie den Author Slug von Username in Nickname

Hallo an die Community,
Ist es möglich, den Standard-Benutzernamen-Slug in einen Spitznamen zu ändern, falls verfügbar?

Standardmäßig lautet die URL wie folgt: http: //domain.tld/author/ (admin ),
ist es möglich, umzuschreiben und zu http: //domain.tld/author/ (Spitzname ) zu wechseln. Wenn ein Benutzer also seinen Spitznamen von der Profilseite aus ändert, ändert sich der Slug auch in den neuen Name vom Benutzer angegeben?

danke vielmals!
Philip

12
Philip

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 Autorenkurznamen anstelle des Autorenkurzbefehls und generieren Sie Autoren-Post-URLs mit dem Kurznamen anstelle des Standardkurzbefehls.

Der erste Teil wird gelöst, indem Sie sich in den Filter request einbinden, prüfen, ob es sich um eine Autorenanfrage handelt, und den Autor anhand seines Spitznamens anstelle von slug 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 durch Einbinden in den author_link-Filter und Ersetzen des Standardautorteils (angegeben durch $author_nicename) durch den Spitznamen.

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

Möglicherweise ist es einfacher, das ansonsten nicht verwendete Feld user_nicename 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 );
    }
}
16
Jan Fabry

Verwenden Sie dieses Plugin: http://wordpress.org/extend/plugins/display-name-author-permalink/

Obwohl es nicht für 3.2.1 getestet wurde. Ich habe es ohne Probleme benutzt.

Wenn Sie beim Aktivieren des Plugins einen Header-Fehler erhalten, finden Sie hier einen Fix: http://wordpresscloaker.com/blog/how-to-fix-wordpress-plugin-does-not-have-a-valid -header-error.html

1
Dominor Novus