我可以在*创建用户之前*挂接到用户注册吗?

时间:2013-01-31 作者:Dan

我想根据与他们的电子邮件地址关联的域限制注册。我在看user_register 动作钩子,但它在用户已经插入后触发,虽然可能被黑客入侵,但效果并不理想。我想抢占而不是追溯删除无效用户。

我在wp-includes/user.php, 但里面似乎没有什么有用的东西。我确实注意到pre_user_email 过滤器,但这似乎并没有提供任何选项来做任何有用的事情,因为我看不到用它做任何事情的方法。

2 个回复
最合适的回答,由SO网友:EAMann 整理而成

你找错地方了。

当用户首次尝试注册时,其用户名和电子邮件将在register_new_user() 中的函数wp-login.php. 这是您要进行筛选的地方。

在创建用户之前,WordPress将通过“register\\u post”操作传递经过清理的用户登录名、电子邮件地址和数组或错误。如果之后出现任何错误,则不会添加用户,用户将在UI中看到错误。

因此,以下未经测试的函数可能会有所帮助:

function prevent_email_domain( $user_login, $user_email, $errors ) {
    if ( strpos( $user_email, \'@baddomain.com\' ) != -1 ) {
        $errors->add( \'bad_email_domain\', \'<strong>ERROR</strong>: This email domain is not allowed.\' );
    }
}
add_action( \'register_post\', \'prevent_email_domain\', 10, 3 );

SO网友:WP Themes

这取决于您是在构建自己的自定义注册表,在其中实现实际用户注册,还是使用WordPress提供的注册表。

如果您使用的是前者,则没有任何,因为您可以访问POST 数据,并负责呼叫wp_insert_user()wp_create_user() 并确保所有所需信息正确无误,即用户名、电子邮件。。

对于后一种情况,勾入register_post 行动这可以在中找到wp-login.php 在…内register_new_user() 作用

/**
 * Code snippet...
 */
 } elseif ( email_exists( $user_email ) ) {
    $errors->add( \'email_exists\', __( \'<strong>ERROR</strong>: This email is already registered, please choose another one.\' ) );
}

do_action( \'register_post\', $sanitized_user_login, $user_email, $errors );

$errors = apply_filters( \'registration_errors\', $errors, $sanitized_user_login, $user_email );

/** rest of the code after... **/

结束