wp_get_archivesのリンクが404になるときの対処法

wp_get_archives()でカスタム投稿タイプの月ごとのアーカイブのリストを表示させたのに、リンク先が404になってしまう…

そんなときの対策です。




なぜ404になるんだい

月別アーカイブページのURLって、デフォルトだと例えばnewsという投稿タイプであれば’/news/2021/08’みたいな感じだと思うんですけど、投稿タイプのパーマリンクを’/news/%post_id%’にしてしまっている場合、記事の詳細ページのURLが’/news/2021’って感じで、アーカイブのURLとかぶるんですよね。

つまり、「‘/news/2021/08’ という記事はありませんよ」と誤って認識されちゃうみたいです。

アーカイブページじゃなくて、記事ページとして認識されてしまっている。

ということは記事のパーマリンク構造を変えればいけるのでは?ってなると思うんですが、記事のパーマリンク構造を変えるのはまぁいろいろきついです。

ここは、もっと簡単なプランBでいきましょう。

実装

実は、月別アーカイブページには「/news/2021/08」ではなく「/news/date/2021/08」でもアクセスできることがあります。これはアクセスできないときもあるので、おそらく、パーマリンクを’/news/%post_id%’にしているとき限定で特別に用意されるパーマリンクなのかなと。

これは実際この辺の仕組みを完全に理解しているわけではないので推測ではありますが、先ほどこのブログでも試しに記事のパーマリンクを’/%post_id%’にしたところ、「/date/2021/08」にアクセスできました。なので、間違ってはないと思います。

というわけで、wp_get_archives()のリンクの文字列を無理やり書き換えちゃいましょう。

wp_get_archives(); を書く場所を、以下のように変更。

wp_get_archives()はそのままでは出力までしてしまうのですが、‘echo’ => falseを設定することで、文字列として変数に代入できます。
さらに文字列を置換する関数str_replaceで、リンクの’/news/’を’/news/date/’に書き換えているわけですね。

ちなみにですが、デフォルトの投稿(post)では、この処理はwp_get_archives()で自動でやってくれるみたいなので、やらなきゃいけないのはカスタム投稿タイプのときだけのようです。

現場からは以上です。

シェアしてくだちい

フォローしてくだちい