WordPressでカスタム投稿の月別アーカイブを作る方法がやっと分かった

いままでWordPressでカスタム投稿の月別アーカイブが鬼門でしたが、やっと作り方が分かった・・・。

最近はウェブサイトに「お知らせ」と「ブログ」が欲しいっていう案件が多いのでカスタム投稿でブログを作る機会が増えているのですが、カスタム投稿で作ったブログの月別アーカイブがなんか最近上手く動かなかったのです(昔はどっかで拾ったコードをfunction.phpに書いてなんとか動いていたような気はする。WordPressアップデートのせいか?)

で、そろそろちゃんと調べるか・・・と色々検証してやっとカスタム投稿の月別アーカイブを作る方法がわかりましたので備忘録的に残しておきます。

WordPressでカスタム投稿の月別アーカイブを作る方法

まずは結論から書くと以下の方法でカスタム投稿の月別アーカイブは作れました。ググったらfunction.phpにコードを書く例が多いのですが、現在はプラグインを1個入れればその作業は不要です。

  • 1)「Custom Post Type Permalinks」プラグインを入れる
  • 2)パーマリンク設定を「投稿名」にする
  • 3)wp_get_archives()にpost_typeを追加する
  • 4)アーカイブのデザインを変えたい場合はarchive-{post-type}.phpを作る

「Custom Post Type Permalinks」プラグインを入れる

「Custom Post Type Permalinks」というプラグイン。これが肝なのですが、これを入れればもう全部パーマリンクを上手く処理してくれます。

Custom Post Type Permalinks

プラグインを入れたら「カスタム投稿タイプのパーマリンクの設定」が出来るようになりますが、デフォルトのままでOK。

1点前提として、カスタム投稿を作る際にhas_archiveをtrueに設定しておかなければいけませんので注意。

パーマリンク設定を「投稿名」にする

1

管理画面の「設定」→「パーマリンク設定」から共通設定の項目を「投稿名」にします。もしくは「日付と投稿名/月と投稿名」など投稿名が入っているものにします。この投稿名が入っていないとダメぽいです。デフォルトや数字ベースでは出来ませんでした。

僕は投稿名を入れるのが面倒でいつもカスタム構造に「%post_id%」を入れてポストIDを出してたんですが、ここがまずかったんですな。URLに日本語が出るの好きじゃないんですが、まあカスタム投稿でアーカイブ作れるならいいや。

wp_get_archives()にpost_typeを追加する

wp_get_archives()は基本的に投稿(post)のアーカイブしか作れません。が、1で入れたプラグインがカスタム投稿の指定を可能にしてくれますので以下のようにpost_type指定を書けば任意のカスタム投稿のアーカイブリストを生成してくれます。

アーカイブのデザインを変えたい場合はarchive-{post-type}.phpを作る

wp_get_archives()で生成された月別リンクはarchive.phpに飛びますが、お知らせのアーカイブとデザインを分けたい時にはarchive-{post-type}.phpというのを作ればそっちに飛びます(blogというカスタム投稿ならarchive-blog.php)

これでカスタム投稿の月別アーカイブが問題無く出来ると思います。これで悩みが1個解決や!

コメント2件