タイトル通りの問題があってここ数日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件↑あります。
やりたくない!!!
一応あがいてあれこれ探しました。
でも結局、Masonry Grid使いたすぎて手作業で直す事にしました。
幸い上のスクリプトのお陰で、クイック編集から日本語スラッグを消して保存すれば勝手に”post-XXXX”のスラッグは入ります。古い記事だしそんなスラッグでOK。
Googleには日本語URLが残っていますが、Wordpressが勝手にステータス301でリダイレクトしてくれるそうです。
ひたすら作業がんばります・・・。
ーーーーー
(検討家庭)
「日本語スラッグの記事を検索して、全スラッグを消して、再投稿」を一括でやるツールは探しても見つかりませんでした。ニッチすぎるか。
SQLでwp_postsテーブルのpost_nemeをデコードして2バイトのエントリーを抜けば同じ事はできます。
でも自分の知識だと検証してる間に作業した方が速い。
こういうのこそRPAだよね・・・