在注册中以用户名身份发送电子邮件

时间:2016-10-07 作者:ste_yeu

许多用户会允许在wp站点中注册,而无需用户名,只需通过电子邮件即可。

这是一个核心问题,所以解决方法(技巧)是用电子邮件替换用户名。

如果wp需要用户名和电子邮件进行注册,我们可以获取电子邮件值并将其放入用户名值中。在注册表中,用户将看到两个字段:

重复您的电子邮件这是一个技巧,因为对于wp来说,真正的字段是:1。用户名(作为您的电子邮件)2。您的电子邮件(重复您的电子邮件)

但还有另一个问题:用户名是否允许使用字符?

我们怎样才能做到这一点?

我们应该在函数中插入代码吗。php文件?。。类似这样:

add_action( \'wp_core_validate_user_signup\', \'custom_validate_user_signup\' );

function custom_validate_user_signup($result)
{
  unset($result[\'errors\']->errors[\'user_name\']);

  if(!empty($result[\'user_email\']) && empty($result[\'errors\']->errors[\'user_email\']))
  {
    $result[\'user_name\'] = md5($result[\'user_email\']);
    $_POST[\'signup_username\'] = $result[\'user_name\'];
  }

  return $result;
}
提前感谢您!

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

您可以使用@. 在用户名中,所以没有问题。现在您可以创建自己的注册表并使用register_new_user(). 你甚至可以操纵wp_registration_url() 使用过滤器register_url, 因此,注册链接将指向您的新注册页面。

如果您想将其与wp login提供的标准界面一起使用。php,您需要一些解决方法。比方说,您只想显示用于注册的电子邮件输入字段,您可以简单地(虽然有点黑客)用如下方式隐藏用户名字段:

add_action( \'register_form\', function() {
    ?><style>#registerform > p:first-child{display:none;}</style><?php
} );
旁注:还可以将样式表排队到wp登录中。php使用login_enqueue_scripts 行动

但如果这样做,您将发送一个空用户名,因此您必须挂接两个过滤器:sanitize_uservalidate_username.

add_filter( \'sanitize_user\', function( $sanitized_user, $raw_user, $strict ) {
    if ( $raw_user != \'\' ) {
        return $sanitized_user;
    }

    if ( ! empty ( $_REQUEST[\'action\'] ) && $_REQUEST[\'action\'] === \'register\' && is_email( $_POST[\'user_email\'] ) ) {
        return $_POST[\'user_email\'];
    }

    return $sanitized_user;
}, 10, 3 );

add_filter( \'validate_username\', function( $valid, $username ) {
    if ( $valid ) {
        return $valid;
    }

    if ( ! empty ( $_REQUEST[\'action\'] ) && $_REQUEST[\'action\'] === \'register\' && is_email( $_POST[\'user_email\'] ) ) {
        return true;
    }

    return is_email( $username );
}, 10, 2 );
在中sanitize_user 我们用电子邮件地址替换空字符串。稍后将使用验证用户名validate_username, 但是,将再次使用空用户名,因此我们也需要捕捉到这一点。

但我认为创建一个自己的表单会更受欢迎,而且不太粗糙。

SO网友:squarecandy

以下是我使用的:

jQuery(document).ready(function($){
    // hide the username field.
    $(\'input#user_login\').parent().parent().hide();
    // force username to mirror the input of the email field
    $(\'input#email\').on(\'change\',function(){
        $(\'#user_login\').val($(this).val());
    });
});
又好又简单。

SO网友:Fred Autier

在函数中添加此项。php(或其他php文件):

add_action(\'login_footer\', function() {
?><script type="text/javascript">
    document.querySelector(\'input#user_login\').parentElement.hidden = true ;
    document.querySelector(\'input#user_email\').onchange = function(){
        document.querySelector(\'input#user_login\').value = this.value ;
    } ;
</script><?php
} );
该操作将在wp登录中打印脚本。php“页脚”。javascript隐藏“user\\u login”标签和输入,并使用电子邮件输入值设置其值。

相关推荐

Change username before login

如何在登录表单中提交之前更改用户名?我用过mobile number 作为用户在站点中注册时的用户名。此外,我已删除0 从手机号码开始。现在在登录表单中,我需要删除0 从手机号码开始,如果用户输入手机号码0. 中是否有用作操作的函数functions.php