Як я можу скасувати резервацію очікуваної реєстрації імені користувача?


9

Я налаштовую новий екземпляр WordPress Multisite, і все ще опрацьовую деякі перетворення в стеці. Найбільш суттєво на даний момент повідомлення про реєстрацію користувачів чомусь не доставляються. Як результат, кілька імен користувачів застрягли в кінцівці, оскільки електронні листи підтвердження, необхідні для їх активації, втрачаються.

На даний момент я хотів би просто вручну зареєструвати ці імена користувачів без електронних листів підтвердження, але коли я намагаюся це зробити, я отримую помилку про те, що ім’я зарезервоване і воно може бути доступним через пару днів. Як я можу їх скасувати?

Відповіді:


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/ 1стовпець active, який встановлений в 1разі , якщо користувач є активним.

Сам Core використовує 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', )
);

Ви можете використовувати 3-й аргумент (масив), якщо ви використовуєте форму (n адміністратор) для виконання цих запитів (наприклад, розширення 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 під назвою "Ключі активації користувача", щоб керувати цією проблемою під час з'ясування того, чому повідомлення не надсилаються. Це дозволяє вручну видалити або схвалити ключі активації для користувачів в MultiSite.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.