マルチバイトに対応しないWPテーマの為にURLから日本語を消す作業が発生

マルチバイトに対応しないWPテーマの為にURLから日本語を消す作業が発生

タイトル通りの問題があってここ数日Blogのテーマを変更していました。
でもどうしても今のテーマ「Masonry Grid」が使いたい。

Masonry Gridの問題

Masonry Grid – WordPress theme | WordPress.org

旧テーマを辞める際、数々のMasonry=石積みレイアウトテーマを探しました。
その中でもこのテーマはレスポンシブかつカスタマイズに優れるし、何より端々にセンスを感じました。

よってやっぱりコレを使いたい。

しかし先日わかったのは
「マルチバイトを含むページ(単一、カテゴリ含む)を表示すると読み込みアニメーションのまま進まない」という問題。

開発元のThemeinWPに投げたけど、シカトされました。まあ文句言うなら金払えよって話ですよね。納得。
Masonry GridにかかわらずこのDev.のテーマ、全部マルチバイト表示できません。

URLに日本語なんて入れる奴おるの!?って感じなんでしょう。

過去記事に日本語スラッグが入る問題

そんなガン無視される日本語がなぜURLに含まれるかというと、WordPressは”名前”に入力された日本語をそのままスラッグに使うからです。
(※スラッグ=指定のコンテンツを示す任意で個別の文字列。URLの一部になる)

上の画像の一番左が記事の名前、一番右がスラッグ。

Google自体も「スラッグの言語は記事と一緒で良い」としています。
ただ表記の様に化けたり、今回のような事があったりと結局不便。

なお記事一覧にスラッグを追加する方法はWordPress管理画面の投稿一覧にスラッグを追加する(固定ページも) | IT女子のお気に入りフォルダを利用させていただきました。

WordPress全般の記事の回避方法

回避するためには別欄の”スラッグ”に英語で手入力しなくてはなりません。
カテゴリと投稿であれば、作成時に名前とは別にスラッグを入力できます。

問題はタグ。
投稿ページのタグ欄に好きなた単語を入れると新規作成されますが、スラッグはつけられません。
よって別途タグ管理ページに行って入力しなくてはなりません。
それを放置すると日本語URLとなります。

投稿ページの回避方法

投稿に限って言えば、パーマリンクが”基本”(http://dolls.tokyo/?p=123)のままなら日本語URLにはなりません。
でも最近よくSEOで推奨される”投稿名”(http://dolls.tokyo/sample-post/)にすると発生します。

徒労日記は途中から日本語スラッグになっていました。
おそらくサイト引越し時にパーマリンクを換えた(でもスラッグを理解していなかった)のが起点でしょう。

これから作成する投稿については防護策があります。
「デフォルトのスラッグは投稿名ではなくpost-記事ID」にすればいいのです。
前のテーマにはこの機能が盛り込まれていました。

今のMasonry Gridは当然のように考慮ナシだったので、Function.phpに追記して同様の防護をとりました。

function auto_post_slug( $slug, $post_ID, $post_status, $post_type ) {
    if ( preg_match( '/(%[0-9a-f]{2})+/', $slug ) ) {
        $slug = utf8_uri_encode( $post_type ) . '-' . $post_ID;
    }
    return $slug;
}
add_filter( 'wp_unique_post_slug', 'auto_post_slug', 10, 4  );

これで手入力を忘れても、最低限スラッグは英語表記になってくれます。

手作業で直し中

過去パーマリンクを変えた際、過去3年間記事のスラッグは全部手作業で変更しました。
それより古い記事、かつパーマリンクを投稿名に変えた以降の投稿が・・・・1500件中500件↑あります。

やりたくない!!!

woman in brown sweater covering her face with her hand

一応あがいてあれこれ探しました。

でも結局、Masonry Grid使いたすぎて手作業で直す事にしました。
幸い上のスクリプトのお陰で、クイック編集から日本語スラッグを消して保存すれば勝手に”post-XXXX”のスラッグは入ります。古い記事だしそんなスラッグでOK。

Googleには日本語URLが残っていますが、Wordpressが勝手にステータス301でリダイレクトしてくれるそうです。
ひたすら作業がんばります・・・。

ーーーーー

(検討家庭)

「日本語スラッグの記事を検索して、全スラッグを消して、再投稿」を一括でやるツールは探しても見つかりませんでした。ニッチすぎるか。
SQLでwp_postsテーブルのpost_nemeをデコードして2バイトのエントリーを抜けば同じ事はできます。
でも自分の知識だと検証してる間に作業した方が速い。

こういうのこそRPAだよね・・・

コメントを残す