Jak mogę cofnąć rezerwację oczekującej rejestracji nazwy użytkownika?

9

Przygotowuję nową instancję WordPress Multisite i wciąż pracuję nad tym, co trzeba. Co najistotniejsze w tej chwili, e-maile rejestracyjne użytkownika nie są dostarczane z jakiegoś powodu. W rezultacie kilka nazw użytkowników utknęło w zawieszeniu, ponieważ e-maile potwierdzające niezbędne do ich aktywacji zostały utracone.

Na razie chciałbym po prostu ręcznie zarejestrować te nazwy użytkowników bez wiadomości e-mail z potwierdzeniem, ale gdy próbuję to zrobić, pojawia się błąd informujący, że nazwa jest zarezerwowana i może być dostępna za kilka dni. Jak mogę je cofnąć?

Kaelin Colclasure
źródło

Odpowiedzi:

13

Warstwa dostępu do bazy danych DB i usuwanie wierszy

WordPress używa wpdbklasy do zarządzania dostępem do warstwy bazy danych za pomocą global $wpdb. Klasa udostępnia metodę o nazwie służącą delete()do usuwania wierszy z tabel:

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

Tabele wielu witryn i klucze aktywacyjne

WordPress ma kilka tabel specyficznych dla MU , gdzie jest jedna {$wpdb->prefix}signups(prefiks ustawiony w wp-config.phppliku). Schemat tabel tutaj . Za aktywację konta użytkownika odpowiada użytkownik activation_key, który ustawia się po kliknięciu przez użytkownika łącza w wiadomości e-mail. Następnie activatedklucz zostanie ustawiony z datetimewartością. Przed aktywacją konta wartością domyślną będzie 0000-00-00 00:00:00(na wypadek, gdyby konieczne było zapytanie o wartość domyślną). W tym procesie jest także kolumna tinyint/ , która jest ustawiona, jeśli użytkownik jest aktywny.1active1

Sam rdzeń używa wpmu_activate_signup(). Spójrz na kilka przykładów. Jedna z nich aktualizuje wpis użytkownika, aby go aktywować - przerobiono pod kątem czytelności.

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

Budowanie zapytania w stosunku do jeszcze nie aktywowanych kont

Po prostu pozwól WP wykonać ciężką pracę:

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

Możesz użyć trzeciego argumentu (tablicy), jeśli używasz formularza (n admin) do wykonania tych żądań (np. Rozszerzenia a WP_List_Table) w celu wskazania, że ​​używasz łańcucha. Pamiętaj, że nadal powinieneś dezynfekować $_POSTwartości ed. Wskazówka: możesz również użyć user_email.

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', ),
    array( '%s', )
);
kajzer
źródło
9

Jeśli chcesz szybkiego rozwiązania w celu usunięcia rejestracji w bazie danych dla określonego użytkownika, wykonaj następujące czynności:

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

Możesz również użyć wtyczki w repozytorium WordPress.org o nazwie „Klucze aktywacji użytkownika”, aby poradzić sobie z tym problemem, gdy zastanawiasz się, dlaczego wiadomości e-mail nie są wysyłane. Pozwala ręcznie usunąć lub zatwierdzić klucze aktywacyjne dla użytkowników na wielu serwerach.

DrewAPicture
źródło