USharing
开放博客

WordPress中文用户名报错

WordPress默认会认定除了英文字母、数字和标点之外的用户名都是不规范的。所以并不会允许注册。会告诉你“错误:此用户名包含无效字符,请输入有效的用户名。”

已经存在的中文名,在修改资料的时候也会发生问题:WordPress会对中文视而不见,它会认为你的用户名是空的,告诉你“不能创建登录名为空的用户。”

解决方法是:

打开你的博客对应的文件目录,可以是在线文件管理,也可以通过FTP或者SFTP等途径连接到服务器。在博客目录下打开wp-includes那个文件夹,找到formatting.php这个文件然后编辑它,摁下command+F (Windows应该是control+F)进行搜索,找到function sanitize_user( $username, $strict = false ) { 这一行,然后再下面紧挨着写一句指令$strict = false; (意思就是让WordPress不要太严肃嘛,任何用户名都是欢迎滴)然后保存就可以了。

也可以在function.php 里加入以下:

//允许中文名
function allowed_chinese_name ($username, $raw_username, $strict) {
  $strict = false;
  $username = wp_strip_all_tags( $raw_username );
  $username = remove_accents( $username );
  $username = preg_replace( '|%([a-fA-F0-9][a-fA-F0-9])|', '', $username );
  $username = preg_replace( '/&.+?;/', '', $username ); 
  if ($strict) {
    $username = preg_replace ('|[^a-zp{Han}0-9 _.-@]|iu', '', $username);
  }
  $username = trim( $username );
  $username = preg_replace( '|s+|', ' ', $username );
  return $username;
}
add_filter ('sanitize_user', 'allowed_chinese_name', 10, 3);

方法2:

function.php 添加该函数,通过直接修改数据库的方式,完成替换用户名。

//判断昵称是否存在
function jinsom_nickname_exists($nickname){
    $user_query = new WP_User_Query( array ( 
        'meta_key' => 'nickname',
        'meta_value'   => $nickname,
        'count_total'=>false,
        'number' =>1
    ));
    if (!empty($user_query->results)){
        return true;
    }else{
        return false;	
    }
}
//更新用户名
function jinsom_update_user_login($user_id,$user_login){
    global $wpdb;
    if($wpdb->query( "UPDATE $wpdb->users SET user_login = '$user_login' WHERE ID=$user_id;" )){
        if(!jinsom_nickname_exists($user_login)){//判断用户名对应的昵称是否存在,如果不存在则自动把昵称也改为跟用户名一样的
            update_user_meta($user_id,'nickname',$user_login);
        }else{
            $rand=rand(0,999);
            update_user_meta($user_id,'nickname',$user_login.'_'.$rand);	
        }
        return 1;
    }else{
        return 0;
    }
}

$rand_name=rand(100000000,999999999); 生成一个随机用户名,在 wp_insert_user() 创建该随机用户,生成一个user_id, 再由 jinsom_update_user_login($user_id,$uname); 和 wp_update_user(array(‘ID’ => $user_id));  更新用户名。

$rand_name=rand(100000000,999999999);
$userdata = array(
    'user_login' => esc_sql($rand_name),
    'user_pass'  => $password,
    'user_email' => esc_sql($email),
);
$user_id = wp_insert_user( $userdata );
 
// On success.
if ( ! is_wp_error( $user_id ) ) {
    
     jinsom_update_user_login($user_id,$uname);
     wp_update_user(array('ID' => $user_id));

    //注册成功后,邮件发送密码
    wp_mail( $email, '账户密码为', $password );
    $value = array("status"=>"1","msg"=>'密码已发送邮箱!');
    echo json_encode($value);
    
} else {
    $value = array("status"=>"0","msg"=>'注册失败!请联系管理员!错误指令:无效id!');
    echo json_encode($value);
}
赞(0) 打赏
未经允许不得转载:USharing » WordPress中文用户名报错

觉得文章有用就打赏一下文章作者

微信扫一扫打赏