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?

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', )
);

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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.