为了解决“该电子邮件地址已被使用”错误,我们可以创建一个有效绕过检查的插件。该插件将分为三个部分,利用三个不同的挂钩。
pre_user_login
在清理用户名后对其进行筛选。我们将使用这个钩子来抓取用户,特别感兴趣的是电子邮件。
pre_user_email
在创建或更新用户之前过滤用户的电子邮件。我们将使用此挂钩将电子邮件修改为一些随机字符。
user_register
注册新用户后立即激发。我们将使用此挂钩在用户注册后手动更新用户电子邮件。
add_filter( \'pre_user_email\', [ new wpse_212671(), \'pre_user_login\' ] );
class wpse_212671 {
protected $user;
public function pre_user_login( $user ) {
$this->user = $user;
if( isset( $user[ \'ID\' ] ) || ! get_user_by( \'email\', $user[ \'user_email\' ] ) {
return $user;
}
add_filter( \'pre_user_email\', [ $this, \'pre_user_email\' ] );
add_action( \'user_register\', [ $this, \'user_register\' ] );
}
public function pre_user_email( $email ) {
return $this->generate_random_string();
}
public function user_register( $user_id ) {
global $wpdb;
$table = $wpdb->prefix . \'users\';
$wpdb->query( $wpdb->prepare(
"UPDATE %s
SET user_email = %s
WHERE user_login = %s",
$table,
$this->user[ \'user_email\' ],
$this->user[ \'user_login\' ]
) );
}
//* Code slightly modified from http://stackoverflow.com/a/13212994/6077935
protected function generate_random_string( $length = 40 ) {
return substr( str_shuffle( str_repeat(
$x=\'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ\',
ceil( $length / strlen( $x ) )
) ), 1, $length );
}
}