development_creative

この記事は1年以上経過しています。

【WordPress】 旧字に対応して鬼滅の刃の禰豆子と打ちたい・・・

旧字に対応したくなった経緯

実は弊社はコスプレのSNSアプリ運営を行っているんです・・・。

https://cospot.jp/

そして、こちらはコスプレに関するメディアサイト、「Cospot Media」です。

https://cospot-media.com/

こちらで、「鬼滅の刃」に関する記事を書く際に発生したトラブル。

なんと、鬼滅の刃のキャラの名称に「旧字」が含まれていることが多いのです。
例えば、竈門禰豆子(かまど ねずこ)など・・・・。

いつものように記事を書いて保存しようとすると、保存ができない!
以下のようなメッセージが表示されしまいます。

「更新に失敗しました。データベース内の投稿を更新できませんでした。

調べていく中で、データベースの文字コードに問題があるということがわかりました。

なぜ、旧字が保存できないのか?

前述したように、データベースの文字コードの種類が原因だそう。
旧字が保存できない理由として、文字コードが「utf8」になってしまっていることが原因です。

「utf8」→「utf8mb4」にすることで、
旧字が含まれている場合でも、問題なく保存ができるようになります。
以下のように1文字あたりのバイト数が違うんですね。

・utf8 =>1文字最大3バイト
・utf8mb4 =>1文字最大4バイト(絵文字対応)

https://blog.z0i.net/2016/09/wp-utf8mb4.html

具体的なコードはこちら

まずは、まず 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回成功したらもういらない)

この有能コードのおかげで問題なく、鬼滅の刃の記事が書けましたとさ。笑
悩んだ方はぜひ、やってみてください。

Related ariticle

関連記事

TOP