Wie kann ich die Reservierung einer ausstehenden Benutzernamenregistrierung aufheben?

9

Ich richte eine neue WordPress Multisite-Instanz ein und arbeite immer noch an einigen Knicken im Stapel. Am wichtigsten ist, dass Benutzerregistrierungs-E-Mails derzeit aus irgendeinem Grund nicht zugestellt werden. Infolgedessen bleiben mehrere Benutzernamen in der Schwebe, da die zur Aktivierung erforderlichen Bestätigungs-E-Mails verloren gehen.

Im Moment möchte ich diese Benutzernamen nur manuell ohne Bestätigungs-E-Mails registrieren. Wenn ich dies jedoch versuche, wird die Fehlermeldung angezeigt, dass der Name reserviert ist und möglicherweise in einigen Tagen verfügbar ist. Wie kann ich die Reservierung aufheben?

Kaelin Colclasure
quelle

Antworten:

13

DB Access Layer & Löschen von Zeilen

WordPress verwendet die wpdbKlasse, um den Zugriff auf die Datenbankebene mithilfe von zu verwalten global $wpdb. Die Klasse bietet eine Methode delete()zum Löschen von Zeilen aus Tabellen:

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

Multisite-Tabellen und Aktivierungsschlüssel

WordPress hat einige MU-spezifische Tabellen , von denen eine vorhanden ist {$wpdb->prefix}signups(Präfix in Ihrer wp-config.phpDatei festgelegt). Tabellenschema hier . Verantwortlich für die Aktivierung des Benutzerkontos ist das activation_key, das festgelegt wird, nachdem der Benutzer auf den Link in der E-Mail geklickt hat. Danach wird der activatedSchlüssel mit einem datetimeWert gesetzt. Bevor das Konto aktiviert wird, lautet der Standardwert 0000-00-00 00:00:00(falls Sie den Standardwert abfragen müssen). Ebenfalls dabei ist die Spalte tinyint/ , die auf gesetzt wird, wenn ein Benutzer aktiv ist.1active1

Core selbst verwendet wpmu_activate_signup(). Schauen Sie sich einige Beispiele an. Eine der folgenden Optionen aktualisiert einen Benutzereintrag, um ihn zu aktivieren - zur besseren Lesbarkeit überarbeitet.

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

Erstellen einer Abfrage für noch nicht aktivierte Konten

Lassen Sie WP einfach die harte Arbeit machen:

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

Sie können das dritte Argument (Array) verwenden, wenn Sie ein (n admin) Formular verwenden, um diese Anforderungen auszuführen (z. B. um a zu erweitern WP_List_Table), um anzuzeigen, dass Sie eine Zeichenfolge verwenden. Denken Sie daran, dass Sie die $_POSTWerte trotzdem bereinigen sollten . Hinweis: Sie können das user_emailauch verwenden.

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', ),
    array( '%s', )
);
Kaiser
quelle
8

Wenn Sie eine schnelle Lösung zum Löschen einer Anmeldung in der Datenbank für einen bestimmten Benutzer suchen, sollten Sie Folgendes tun:

/**
 * 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)

Sie können auch ein Plugin im WordPress.org-Repo mit dem Namen "User Activation Keys" verwenden, um dieses Problem zu beheben, während Sie herausfinden, warum keine E-Mails gesendet werden. Sie können Aktivierungsschlüssel für Benutzer in Multisite manuell löschen oder genehmigen.

Malte ein Bild
quelle