【WordPress】カテゴリースラッグと画像ファイル名の重複で投稿記事が表示されないことがある!
特定のカテゴリの投稿記事のみ表示されないトラブルは、アップロードされた画像が原因だった
お客様から実際に問い合わせがあった症状を、
ローカル環境に再現して検証してみました。
投稿カテゴリーが複数あり、あるカテゴリーに登録した投稿記事のみ
アーカイブ(一覧)ページは表示されるのに記事詳細ページは表示されないといった症状でした。
該当カテゴリーのスラッグを変更したり、
登録カテゴリーを変更すれば表示されるのですが、
もちろん登録カテゴリーは変更したくないし、
カテゴリーのスラッグも変更したくないとのことで原因を探りました。
検証環境
WordPress ver 5.5
PHP Version 7.4.2
MySQL 5.7.26
使用テーマ Twenty Twentyバージョン: 1.5
■パーマリンク設定
カスタム構造 /%category%/%post_id%/
※ /%category%/%postname%/で投稿記事のスラッグを数字だけにした場合も同じ症状が発生します。
現象確認
・赤カテゴリー(スラッグ:red)
・黄カテゴリー(スラッグ:yellow)
・緑カテゴリー(スラッグ:green)
の3カテゴリーを作成し、
各カテゴリーの記事を投稿しました。
まず、赤カテゴリーのアーカイブページを表示させるために、
『赤カテゴリー』をクリックします。
黄カテゴリー、緑カテゴリーも同様に各一覧は問題なく表示されました。
次に投稿記事を表示させるためにタイトル『いちご』をクリックします。
タイトル『バナナ』の投稿記事も同様に問題なく表示されました。
ただし、タイトル『メロン』をクリックすると、
以下のページが表示されます。
ソースを見ると正しいリンク先(http://localhost:8888/fruits/green/16/)が指定されているのですが
http://localhost:8888/fruits/green/リダイレクトされてしまいます。
タイトル『メロン』も同様で、緑カテゴリーに登録されている記事は
http://localhost:8888/fruits/green/にリダイレクトされてしまうようです。
自動リダイレクト機能を無効にしてみる
WordPressは、存在しないURLをクリックしたときに、
自動で正しいと推測したURLにリダイレクトする機能があります。
管理画面の投稿編集画面のパーマリンクにも表示されているURLなので、
存在しないURLではないはずですが、今回は以下ページに記載されている方法で、
このリダイレクト機能を無効にしました。
参考:redirect_canonical
function remove_redirect_guess_404_permalink( $redirect_url ) {
if ( is_404() )
return false;
return $redirect_url;
}
add_filter( 'redirect_canonical', 'remove_redirect_guess_404_permalink' );
あらためてリンクをクリックすると
今度は正しいリンク先URLがアドレスバーに表示されたのですが、
404ページが表示されてしまいました。
『メロン』『スイカ』の投稿記事は存在しないページとなっている様です。
改善されない為、上記コードを削除します。
※ リダイレクトルールの詳細はwp-includes/canonical.phpに書かれているようです。
参考:canonical.php
※ リダイレクトルールはRewrite Rules Inspectorというプラグインを使えば一覧表示で確認することができます。
参考:Rewrite Rules Inspector
表示されている画像を確認する
症状から推測すると、カテゴリスラッグ『green』が問題の様なので、
まずは表示される画像をメディアライブラリにて確認します。
やはり『green』で検索すると見覚えのある画像がヒットします。
ただし、タイトルを変更しても症状は変わりません。
今回問題を起こしているのは、スラッグです。
一番下にある『さらに詳細を編集』リンクをクリックして、
『表示オプション』をクリックして『スラッグ』にチェックを入れると
以下のようにスラッグ入力画面が出てきます。
投稿などと同様に、
画像もアップロードすると、
自動でスラッグが登録されます。
今回は画像のファイル名がgreenだったため、
自動でタイトル、スラッグが『green』に登録されたようです。
このスラッグを
『green1』に変更して再度、
タイトル『メロン』をクリックすると・・
無事表示されました!!
結果まとめ
タイトルの通りですが、カテゴリースラッグと画像ファイル名の重複で発生した症状でした。
そして今回の症状もテンプレートに問題はなく、投稿者が無意識に行った操作で発生する症状でした。
・特定のパーマリンク設定
・カテゴリスラッグと同じ画像ファイルが存在する
上記の条件でこの症状は発生したのですが、
今回のパーマリンク設定は珍しい設定ではなく、
またカテゴリー名はサイトの主要なキーワードの一つであることが多いため為、
そのキーワードと同じ名前の画像をアップする可能性は少なくないと推測すると、
この症状は頻繁に起きいているトラブルではないかと感じた検証結果でした。