$conf, $runtime; function_exists('chdir') AND chdir(APP_PATH); $r = 'mysql' == $conf['cache']['type'] ? website_set('runtime', $runtime) : cache_set('runtime', $runtime); } function runtime_truncate() { global $conf; 'mysql' == $conf['cache']['type'] ? website_set('runtime', '') : cache_delete('runtime'); } register_shutdown_function('runtime_save'); ?>php - Allowing Non-Latin Characters In WordPress Registration|Programmer puzzle solving
最新消息:Welcome to the puzzle paradise for programmers! Here, a well-designed puzzle awaits you. From code logic puzzles to algorithmic challenges, each level is closely centered on the programmer's expertise and skills. Whether you're a novice programmer or an experienced tech guru, you'll find your own challenges on this site. In the process of solving puzzles, you can not only exercise your thinking skills, but also deepen your understanding and application of programming knowledge. Come to start this puzzle journey full of wisdom and challenges, with many programmers to compete with each other and show your programming wisdom! Translated with DeepL.com (free version)

php - Allowing Non-Latin Characters In WordPress Registration

matteradmin6PV0评论

There exist a plugin for wordpress to enable usernames containing special characters (Russian, Cyrillic, Arabic …). Unfornetly this plugin didn't work for me. I have even a look at this solution but didn't work too. Here is the function defined to register users in the theme I'm using (QAEngine theme)

public function register(){
    $param = $_REQUEST['content'];
    $args  = array(
        'user_email'    => $param['email'],
        'user_pass'     => $param['password'],
        'user_login'    => $param['username'],
        'display_name'  => isset($param['display_name']) ? $param['display_name'] : $param['username']
    );
    $captcha = isset($_REQUEST['captcha']) ? $_REQUEST['captcha'] : '';
    // validate here, later
    try {

        //verify captcha
        ae_verify_captcha($captcha, __('Please enter a valid captcha!', ET_DOMAIN));

        $role = apply_filters('qa_custom_role', 'author' );
        do_action ('je_before_user_register', $args);

        // apply register & log the user in
        $auto_sign  = ae_get_option( 'user_confirm' ) ? false : true;
        $user_id    = et_register( $args , $role, $auto_sign );

        if ( is_wp_error($user_id) ){
            throw new Exception($user_id->get_error_message() , 401);
        }

        $data     = get_userdata( $user_id );
        $userdata = QA_Member::convert($data);
        // generate new nonces
        $msg = ae_get_option( 'user_confirm' ) ? __('You have registered an account successfully but are not able to join the discussions yet. Please confirm your email address first.', ET_DOMAIN) : __('You are registered and logged in successfully.', ET_DOMAIN) ;
        $response = array(
            'success'       => true,
            'code'          => 200,
            'msg'           => $msg,
            'data'          => $userdata,
            'redirect'      => apply_filters( 'qa_filter_redirect_link_after_register', home_url() )
        );

    } catch (Exception $e) {
        $response = array(
            'success' => false,
            'code'    => $e->getCode(),
            'msg'     => $e->getMessage()
        );
    }
    wp_send_json( $response );
}

Here you could find a complete php file in which this function is declared.

Any recommendation for how to allow non-latin characters in usernames?

Update

After looking for other similar questions, I must clarify that I'm working on a multisite and I found that some given solutions are about hooking wpmu_validate_user_signup filter in multisite case (Here an example). So I add the given code to my function.php file but this didn't solve the problem even if I keep the code for hooking the sanitize_user filter.

However, when I made changes in the wordpress core I mean in /wp-includes/ms-functions.php#L452.

if ( $user_name != $orig_username || preg_match( '/[^a-z0-9]/', $user_name ) ) {

to

if ( $user_name != $orig_username || preg_match( '/^[\p{Arabic}a-z0-9 _.\-@]/', $user_name ) ) {

and in /wp-includes/formatting.php#L2095 from

$username = preg_replace( '|[^a-z0-9 _.\-@]|i', '', $username );

to

$username = preg_replace( '|^[\p{Arabic}a-z0-9 _.\-@]|i', '', $username );

This enables me to register new users with non-latin characters in the backend. However, I can't log in with the new registered usernames in non-latin characters, either register users with no-latin characters from the frontend of my multisite.

Post a comment

comment list (0)

  1. No comments so far