Comment annuler la réservation d'un enregistrement de nom d'utilisateur en attente?

9

Je suis en train de configurer une nouvelle instance de WordPress Multisite et je travaille toujours sur quelques défauts dans la pile. Plus important pour le moment, les e-mails d'enregistrement des utilisateurs ne sont pas envoyés pour une raison quelconque. En conséquence, plusieurs noms d'utilisateur sont bloqués dans les limbes car les e-mails de confirmation nécessaires pour les activer sont perdus.

Pour l'instant, je voudrais simplement enregistrer ces noms d'utilisateur sans e-mails de confirmation, mais lorsque j'essaie de le faire, je reçois une erreur indiquant que le nom est réservé et peut être disponible dans quelques jours. Comment puis-je les dé-réserver?

Colclasure de Kaelin
la source

Réponses:

13

Couche d'accès DB et suppression de lignes

WordPress utilise la wpdbclasse pour gérer l'accès à la couche de base de données à l'aide de global $wpdb. La classe fournit une méthode nommée delete()pour supprimer des lignes des tables:

$wpdb->delete( $table, $where, $where_format = null );

Tables multisites et clés d'activation

WordPress a des tables spécifiques à MU , où une est {$wpdb->prefix}signups(préfixe défini dans votre wp-config.phpfichier). Schéma des tables ici . Le responsable de l'activation du compte utilisateur est le activation_key, qui est défini après que l'utilisateur a cliqué sur le lien dans l'e-mail. Après cela, la activatedclé sera définie avec une datetimevaleur. Avant l'activation du compte, la valeur par défaut sera 0000-00-00 00:00:00(au cas où vous auriez besoin de rechercher la valeur par défaut). Également dans le processus est la colonne tinyint/ , qui est définie si un utilisateur est actif.1active1

Core lui-même utilise wpmu_activate_signup(). Regardez-le pour quelques exemples. L'un est le suivant qui met à jour une entrée utilisateur pour l'activer - retravaillé pour plus de lisibilité.

$wpdb->update(
    $wpdb->signups,
    array(
        'active'    => 1,
        'activated' => current_time( 'mysql', true ),
    ),
    array( 'activation_key' => $key, )
);

Création d'une requête sur des comptes non encore activés

Laissez simplement WP faire le gros du travail:

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', )
);

Vous pouvez utiliser le troisième argument (tableau) si vous utilisez un formulaire (n admin) pour effectuer ces requêtes (par exemple, étendre a WP_List_Table) pour indiquer que vous utilisez une chaîne. Gardez à l'esprit que vous devez toujours nettoyer les $_POSTvaleurs ed. Astuce: vous pouvez également utiliser le user_email.

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', ),
    array( '%s', )
);
kaiser
la source
9

Si vous voulez une solution rapide pour supprimer une inscription dans la base de données pour un utilisateur spécifique, cela devrait faire ce que vous voulez:

/**
 * Delete a row in the signups table for a given username.
 *
 * @param string $user_login Username.
 * @return bool Whether the signup row was successfully deleted.
 */
function delete_activation_key_by_user( $user_login ) {
    global $wpdb;

    $success = false;

    if ( false !== $wpdb->delete( $wpdb->signups, array( 'user_login' => sanitize_text_field( $user_login ) ) ) ) {
        $success = true;
    }
    return $success;
}

var_dump( delete_activation_key_by_user( 'the_username' ) );
// bool(true|false)

Vous pouvez également utiliser un plugin dans le dépôt WordPress.org appelé `` Clés d'activation utilisateur '' pour gérer ce problème pendant que vous déterminez pourquoi les e-mails ne sont pas envoyés. Il vous permet de supprimer ou d'approuver manuellement les clés d'activation pour les utilisateurs de Multisite.

DrewAPicture
la source