問題描述
我正在設置一個新的 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 /1 列 active 的過程中,如果用户處於活動狀態,則將其設置為 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。