如何取消保留未决的用户名注册?


9

我正在建立一个新的WordPress Multisite实例,并且仍在解决堆栈中的一些问题。目前最重要的是,由于某些原因,未发送用户注册电子邮件。结果,由于丢失了激活它们所需的确认电子邮件,一些用户名陷入了困境。

现在,我只想手动注册这些用户名,而不用发送确认电子邮件,但是当我尝试这样做时,我收到一条错误消息,说该名称已保留并且可能在几天之内可用。我该如何取消保留它们?

Answers:


13

数据库访问层和删除行

WordPress使用wpdb该类使用来管理对数据库层的访问global $wpdb。该类提供了一种名为delete()从表中删除行的方法:

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

多站点表和激活密钥

WordPress有一些MU特定表,其中一个是{$wpdb->prefix}signupswp-config.php文件中设置的前缀)。表方案在这里。负责用户帐户的激活是 activation_key,在用户单击邮件中的链接后进行设置。之后,activated将为键设置一个datetime值。在激活帐户之前,默认值将是0000-00-00 00:00:00(如果您需要查询默认值)。tinyint/ 1列也在此过程中active1如果用户处于活动状态,则设置为/ 列。

核心本身使用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', )
);

如果您正在使用(n admin)形式执行那些请求(例如,扩展WP_List_Table)以表明您正在使用字符串,则可以使用第三个参数(数组)。请记住,您仍然应该清理$_POSTed值。提示:您也可以使用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中用户的激活密钥。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.