問題描述

我正在設置一個新的 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。