問題描述

我正在設定一個新的 WordPress 多站點例項,並且仍然在堆疊中處理一些扭結。目前最顯著的是使用者註冊電子郵件由於某種原因沒有被提供。結果是,幾個使用者名稱被困在一邊,因為啟用它們所需的確認郵件將丟失。

現在我想手動註冊這些使用者名稱,沒有確認電子郵件,但是當我嘗試這樣做時,我會收到一個錯誤,稱該名稱是保留的,可能在幾天內可用。我怎麼能 un-reserve 他們?

最佳解決方案

DB 訪問層& 刪除行

WordPress 使用 wpdb 類來管理使用 global $wpdb 對資料庫層的訪問。該類提供了一個名為 delete()的方法來刪除表中的行:

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

多功能桌子啟用鍵

WordPress 有 some MU specific tables,其中一個是 {$wpdb->prefix}signups(您的 wp-config.php 檔案中設定的字首) 。 Tables scheme here 。負責使用者帳號啟用的是 activation_key,在使用者點選郵件中的連結之後,它將被設定。之後,activated 鍵將被設定為 datetime 值。在帳戶啟用之前,預設值為 0000-00-00 00:00:00(如果您需要查詢預設值) 。另外在 tinyint /1active 的過程中,如果使用者處於活動狀態,則將其設定為 1

核心本身使用 wpmu_activate_signup()。看看它的一些例子。以下是更新使用者條目以啟用它 – 為了可讀性而進行了重新修改。

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

針對 not-yet-activated 帳戶構建查詢

只要讓 WP 做得很努力:

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

如果您使用 (n admin) 表單執行這些請求 (例如擴充套件 WP_List_Table) 以指示您正在使用字串,則可以使用第 3 個引數 (陣列) 。請記住,您仍然應該對 $_POST 的值進行消毒。提示:您也可以使用 user_email

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

次佳解決方案

如果您想要一個快速解決方案來刪除資料庫中針對特定使用者的註冊,那麼應該執行以下操作:

/**
 * 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 repo 中使用名為 「使用者啟用金鑰」 的外掛來管理此問題,同時確定為什麼不傳送電子郵件。它允許您手動刪除或批准 Multisite 中的使用者的啟用金鑰。

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。