Как я могу отменить зарезервированную регистрацию имени пользователя?

9

Я настраиваю новый экземпляр WordPress Multisite и до сих пор работаю над некоторыми перегибами в стеке. Что наиболее важно в настоящее время, электронные письма с регистрацией пользователей по какой-то причине не доставляются. В результате несколько имен пользователей застряли в подвешенном состоянии, поскольку электронные письма с подтверждением, необходимые для их активации, теряются.

На данный момент я хотел бы просто вручную зарегистрировать эти имена пользователей без подтверждения по электронной почте, но когда я пытаюсь это сделать, я получаю сообщение о том, что имя зарезервировано и может быть доступно через пару дней. Как я могу отменить их?

Келин Colclasure
источник

Ответы:

13

Слой доступа к БД и удаление строк

WordPress использует wpdbкласс для управления доступом к слою базы данных с помощью global $wpdb. Класс предоставляет метод с именем delete()для удаления строк из таблиц:

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

Многосайтовые таблицы и ключи активации

В WordPress есть несколько специфических таблиц MU , одна из которых {$wpdb->prefix}signups(префикс, заданный в вашем wp-config.phpфайле). Схемы таблиц здесь . Ответственность за активацию учетной записи пользователя несет тот activation_key, который устанавливается после того, как пользователь щелкнул ссылку в письме. После этого activatedключ будет установлен со datetimeзначением. Перед активацией учетной записи значение по умолчанию будет 0000-00-00 00:00:00(в случае, если вам нужно запросить по умолчанию). Также в процессе находится столбец tinyint/ , который устанавливается, если пользователь активен.1active1

Ядро само использует wpmu_activate_signup(). Посмотрите на это для некоторых примеров. Одним из них является следующее, которое обновляет запись пользователя для ее активации - переработано для удобства чтения.

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

Создание запроса к еще не активированным аккаунтам

Просто позвольте WP сделать тяжелую работу:

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

Вы можете использовать третий аргумент (массив), если вы используете форму (n admin) для выполнения этих запросов (например, для расширения a WP_List_Table), чтобы указать, что вы используете строку. Имейте в виду, что вы все еще должны дезинфицировать $_POSTзначения. Подсказка: вы также можете использовать user_email.

global $wpdb;
$wpdb->delete(
    $wpdb->signups,
    array( 'user_login' => 'some_login', ),
    array( '%s', )
);
кайзер
источник
9

Если вы хотите быстрое решение для удаления регистрации в базе данных для конкретного пользователя, это должно сделать то, что вы хотите:

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

Вы также можете использовать плагин в репозитории WordPress.org под названием «Ключи активации пользователя» для решения этой проблемы, пока вы выясняете, почему электронные письма не отправляются. Это позволяет вручную удалять или утверждать ключи активации для пользователей в мультисайте.

DrewAPicture
источник