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?

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

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.