私は、ユーザー名にヘブライ文字を使用可能にするためのプラグインを書きました。これは完全なコードです:
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文字を超える場合、ユーザーリストにユーザーが作成されないことです。ただし、それでもユーザーが作成されたことを示す確認メールが送信されます。名前と電子メールアドレスはメッセージに表示されません。
私が悪いことをしているという考えはありますか?
これは完全な答えではありませんが、それはあなたに何らかの方向性を与える試みです。うまくいけばここコミュニティと私たちはあなたのための解決策を思い付くことができます!
最初に、私はあなたの問題を再現することができました:
functions.php
に入れました。if( $strict )
テストを削除しました(ヘブライ語を話さない人は、 Google翻訳 を使って自分の名前をヘブライ語に翻訳した後、文字を削除しました)。
うまくいかなかったとき、私が得たエラーは次のとおりです。
エラー:あなたを登録できませんでした…ウェブマスターに連絡してください!
私は前にこのエラーを見たことがない。 wp-includes/user.php から来ています。この順序で調べていることは、wp_create_user()
、したがってwp_insert_user()
がfalseまたはエラーオブジェクトを返すことです。
wp_insert_user()
はこの作業を手助けするためにプラグインすることができるたくさんのフィルターを持っています。それはこれらのうちの1つをつまずくかもしれません。
あるいは、データベースの問題である可能性があります。 このStackOverflow回答 には、MySQLデータベースでヘブライ文字をサポートするためのいくつかのアイデアがあります。私のテーブルエンコーディングは既にutf8_general_ci
に設定されていましたが、私のデータベース自体はそうではありませんでしたので、私はそれを変更し、残念ながらそれは解決しませんでした。また、 wpdb を介してSET NAMES
クエリを実行しようとしましたが、そのように動作することを意味していない可能性があります。
私はデータベースのエキスパートではないので、これがデータベースの制限であるかどうかわからないので、回避できない可能性があります。今のところ、私はwp_insert_user()
が通過するこれらのフィルタのうちの1つに最良の可能性があると思います。
now これらを徹底的に調べてそれがうまくいっている場所を見つけ出す時間はありませんが、うまくいけばこれでうまくいくでしょう。私は見つけることができます。