问题描述
我正在设置一个新的 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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。