旧字に対応したくなった経緯
実は弊社はコスプレのSNSアプリ運営を行っているんです・・・。
そして、こちらはコスプレに関するメディアサイト、「Cospot Media」です。
こちらで、「鬼滅の刃」に関する記事を書く際に発生したトラブル。
なんと、鬼滅の刃のキャラの名称に「旧字」が含まれていることが多いのです。
例えば、竈門禰豆子(かまど ねずこ)など・・・・。
いつものように記事を書いて保存しようとすると、保存ができない!
以下のようなメッセージが表示されしまいます。
「更新に失敗しました。データベース内の投稿を更新できませんでした。
調べていく中で、データベースの文字コードに問題があるということがわかりました。
なぜ、旧字が保存できないのか?
前述したように、データベースの文字コードの種類が原因だそう。
旧字が保存できない理由として、文字コードが「utf8」になってしまっていることが原因です。
「utf8」→「utf8mb4」にすることで、
旧字が含まれている場合でも、問題なく保存ができるようになります。
以下のように1文字あたりのバイト数が違うんですね。
・utf8 =>1文字最大3バイト
https://blog.z0i.net/2016/09/wp-utf8mb4.html
・utf8mb4 =>1文字最大4バイト(絵文字対応)
具体的なコードはこちら
まずは、まず wp-config.php の DB_CHARSET を utf8mb4 に指定。
define('DB_CHARSET', 'utf8mb4');
そして、以下のコードをfunction.phpに設置してください。
if( isset($_GET["upgradeUtf8mb4"]) && $_GET["upgradeUtf8mb4"]==1) {
require_once ABSPATH."wp-admin/includes/upgrade.php";
if ( is_multisite() ) {
$tables = $wpdb->tables( 'blog' );
} else {
$tables = $wpdb->tables( 'all' );
if ( ! wp_should_upgrade_global_tables() ) {
$global_tables = $wpdb->tables( 'global' );
$tables = array_diff_assoc( $tables, $global_tables );
}
}
foreach ( $tables as $table ) {
maybe_convert_table_to_utf8mb4( $table );
}
echo "done.";
exit;
}
https://あなたのサイトのアドレス/?upgradeUtf8mb4=1
なんと、このURLへのアクセスがフックとなり、データベースの文字コードが変更されます。
問題なく完了すると、空白のページに「done.」と書かれたページに遷移します!
改めて、参考のHPをご紹介。
done.が出たら、function.phpに貼り付けた関数は削除してくださいね!
(1回成功したらもういらない)
この有能コードのおかげで問題なく、鬼滅の刃の記事が書けましたとさ。笑
悩んだ方はぜひ、やってみてください。