Plains フリーランス フロントエンドエンジニア

備忘録 2012.09.04

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

WordPressには投稿記事を年別、月別、日別それぞれの分類で一覧表示する機能があります。しかしながら、特定カテゴリーに関して年月日別の一覧を表示するということは、デフォルトの機能ではできません。そこで”Archives for a category”というプラグインを利用するわけですが、それでもカスタム投稿タイプの記事を年月日別に表示することはできませんから別の方法を考えなければならないのです。

そのやり方がWordPressフォーラムの記事に記載されていましたので、流用させていただきました。

●スクリプト1

add_filter( 'getarchives_where', 'my_getarchives_where', 10, 2 );
function my_getarchives_where( $where, $r ) {
  global $taxonomy_getarchives_data;
  if ( isset($r['post_type']) ){
    $taxonomy_getarchives_data['post_type'] = $r['post_type'];
    $where = str_replace( '\'post\'', '\'' . $r['post_type'] . '\'',
             $where );
  }
  return $where;
}

上記のスクリプトをテーマのfunctions.phpに追加すればよいとのことでしたが、これだけでは上手く動作しません。
どうやらwp_get_archives()によって出力される年月日リストのリンク先に問題があるようで、”post_type=”なる引数が追加されなければならないのですが、上記のスクリプトだけではリンク先のURLを変更することはできません。そのため手動で引数を書き足さなければ目的の投稿一覧が表示されないのです。
そこで、”Archives for a category”プラグインのエッセンスからヒントを得た次のスクリプトで、リストのURLを変更することにしました。

●スクリプト2

function archive_link_for_taxonomy($url){
  global $taxonomy_getarchives_data;
  if (isset($taxonomy_getarchives_data['post_type'])){
    $url .= strpos($url, '?') === false ? '?' : '&';
    $url .= 'post_type=' . $taxonomy_getarchives_data['post_type'];
  }
  return $url;
}
add_filter('year_link', 'archive_link_for_taxonomy');
add_filter('month_link', 'archive_link_for_taxonomy');
add_filter('day_link', 'archive_link_for_taxonomy');

後は、テンプレートにwp_get_archives()を次のように記述すれば、カスタム投稿タイプの年月日別アーカイブがリスト表示されます。

●テンプレートへの記述

wp_get_archives(array('post_type' => 'my_custum_post',
                      'type' => 'monthly'));

記事の一覧表示に使用されるテンプレートはdate.phpです。

Go to Top