WordPress: Nutzername mit PHP ändern

So können Sie den Username in WordPress programmatisch mit PHP ändern.

WordPress macht es einem wirklich nicht einfach den Username eines Nutzers zu ändern. Das System erlaubt es weder Admins im Backend, noch gibt es überhaupt eine Funktion dafür. Die einzige sinnvolle Funktion, nämlich wp_update_user erlaubt eben dieses Feld auch nicht zu updaten.

Ich habe heute eine “kleine Funktion” geschrieben, die in meinem Setup hervorragend funktioniert. Dabei muss gesagt werden, dass in dem System die E-Mail-Adresse gleich dem Nutzernamen ist. Damit braucht der Nutzer sich nur eines zu merken, kann allerdings dabei auch deutlich mehr Fehler machen. Also einfach mal nicht davon ablenken lassen, dass der Funktionsname change_email_address heisst.

/**
     * Will change the email address, login and nicename of user given by user_id
     *
     * @param string $user_id   The desired user id
     * @param string $new_email The new email address
     *
     * @return bool
     */
    function change_email_address($user_id, $new_email)
    {


        if (!is_email($new_email)) {
            return false;
        }


        $user_with_mail_exists = get_user_by('email', $new_email );

        // could not change email
        if ($user_with_mail_exists !== false) {

            return false;

        }

    
        // because wordpress don't allow changing username by function, we need to use the db directly
        global $wpdb;

        $nicename = sanitize_title($new_email);

        $args = array(
            'user_login'    => $new_email,
            'user_nicename' => $nicename,
            'user_email'    => $new_email
        );


        $updated = $wpdb->update($wpdb->users, $args, array('ID' => $user_id));

        if ($updated === false) {

            return false;

        }

        // delete the cache so we have asap the new data
        wp_cache_delete($user_id, 'users');


        return true;


    }

Im Großen und ganzen werden verschiedene Tests durchgeführt (gültige Mail-Adresse, Adresse schon vergeben etc.) bis dann direkt per wpdb->update der Nutzername geändert wird. Damit wird nach dem Update auch sofort auf die Daten zugreifen können, wird noch der interne User-Cache von WordPress gelöscht.


0 0 0


Mitdiskutieren

*