web-dev-qa-db-fra.com

Comment puis-je annuler une réservation en attente d'un nom d'utilisateur?

Je suis en train de mettre en place une nouvelle instance Multisite WordPress et je travaille toujours sur quelques problèmes dans la pile. De manière plus significative pour le moment, les courriels d'enregistrement des utilisateurs ne sont pas livrés pour une raison quelconque. En conséquence, plusieurs noms d’utilisateurs sont bloqués, les e-mails de confirmation nécessaires à leur activation étant perdus.

Pour l'instant, j'aimerais simplement enregistrer manuellement ces noms d'utilisateur sans recevoir d'e-mails de confirmation. Toutefois, 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 annuler la réservation?

8
Kaelin Colclasure

Couche d'accès à la base de données et suppression de lignes

WordPress utilise la classe wpdb pour gérer l'accès à la couche de base de données à l'aide de global $wpdb. La classe fournit une méthode appelée delete() pour supprimer les 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ù l’un est {$wpdb->prefix}signups (préfixe défini dans votre fichier wp-config.php). Schéma des tables ici . Le responsable de l'activation du compte d'utilisateur est le activation_key, qui est défini après que l'utilisateur a cliqué sur le lien dans le courrier. Après cela, la clé activated sera définie avec une valeur datetime. Avant que le compte ne soit activé, la valeur par défaut sera 0000-00-00 00:00:00 (au cas où vous auriez besoin de demander la valeur par défaut). La procédure tinyint/1 column active est également en cours. Elle est définie sur 1 si un utilisateur est actif.

Le noyau lui-même utilise wpmu_activate_signup() . Regardez-le pour quelques exemples. Le premier est le suivant qui met à jour une entrée utilisateur pour l’activer - retravaillée pour la lisibilité.

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

Construire 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 exécuter ces demandes (par exemple, pour étendre un WP_List_Table) afin d'indiquer que vous utilisez une chaîne. N'oubliez pas que vous devez toujours nettoyer les valeurs $_POSTed. Astuce: Vous pouvez aussi utiliser le user_email.

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

Si vous souhaitez une solution rapide pour supprimer une inscription dans la base de données pour un utilisateur spécifique, procédez comme suit:

/**
 * 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 référentiel WordPress.org appelé "Clés d'activation d'utilisateur" pour gérer ce problème pendant que vous déterminez pourquoi les courriels ne sont pas envoyés. Il vous permet de supprimer ou d’approuver manuellement les clés d’activation pour les utilisateurs multisites.

8
DrewAPicture