首页 > 解决方案 > 如何以编程方式在 wordpress 中插入用户、希伯来语用户名?

问题描述

我正在尝试从我的自定义网站插入用户,这是不同的语言。用户已使用英语或希伯来语在该网站上注册。

使用函数 wp_insert_user

$usernicename = $userpost['first_name'] . $userpost['last_name'];
    $user_login_name = $userpost['last_name'].$userpost['first_name'];
    $user_password = "xyz@123";

    $userdata = array(
    'user_pass'             => $userpost['password'],   
    'user_login'            => $user_login_name,   
    'user_nicename'         => $usernicename,      
    'user_email'            => $userpost['email'],   
    'first_name'            => $userpost['first_name'],   
    'last_name'             => $userpost['last_name'],  
    'user_registered'       => $userpost['registration'],   
    'role'                  => 'subscriber',   
    );
$id = wp_insert_user( $userdata ) ;

所有名称为英语的用户都已成功插入,但使用希伯来语/不同语言的用户会出错

object(WP_Error)#11230 (2) {
  ["errors"]=>
  array(1) {
    ["empty_user_login"]=>
    array(1) {
      [0]=>
      string(46) "Cannot create a user with an empty login name."
    }
  }
  ["error_data"]=>
  array(0) {
  }
}

我已经从管理员设置更改了站点语言,但这也不起作用。

标签: phpwordpressmigrationhebrew

解决方案


我找到了解决我的问题的方法,这主要是因为用户名的清理。希伯来字符被 santizied 并返回 null,这就是它给出错误空登录名的原因。

通过使用我找到的代码或 wordpress 插件解决了这个问题

1. wordpress 特殊字符 2.希伯来语用户名

或者您可以使用下面的代码并将其粘贴到您的 function.php 文件中,它将覆盖用户名过滤功能。

add_filter ('sanitize_user', 'hu_sanitize_user', 10, 3);

//Overrides the Wordpress sanitize_user filter to allow hebrew letters and english letters only

function hu_sanitize_user ($username, $raw_username, $strict)
{
//Strip HTML Tags
$username = wp_strip_all_tags ($raw_username);

//Remove Accents
$username = remove_accents ($username);

//Kill octets
$username = preg_replace ('|%([a-fA-F0-9][a-fA-F0-9])|', '', $username);


//Kill entities
$username = preg_replace ('/&.+?;/', '', $username);

if ($strict){
    //Replace
    $username = preg_replace( '[\p{Hebrew}a-zA-Z]', '', $username );
}

//Remove Whitespaces
$username = trim ($username);

// Consolidate contiguous Whitespaces
$username = preg_replace ('|\s+|', ' ', $username);

return $username;
}

上述两种解决方案(代码/插件)都只允许您在用户名中输入 8 个希伯来语字符。这是因为 user_login 列被声明为 varchar(60) 并且与英文字符相比,希伯来字符占用更多字节,因此您必须根据需要进行更改。


推荐阅读