カスタム投稿タイプの月別アーカイブを出したい時に、自分が設定したパーマリンク設定通りのURLで出す方法

カスタム投稿タイプにはいつも悩んでしまうのですが、下記のような条件でサイドバーに月別アーカイブを出したい時のやり方です。

  • カスタム投稿タイプreportというのを登録している
  • パーマリンクは、/report/%post_id%にしている
  • 2012年6月のreport記事一覧は、/report/date/2012/06としたい


functions.phpに、下記を書きます。

function my_custom_post_type_archive_where( $where, $args ){  
    $post_type  = isset( $args['post_type'] ) ? $args['post_type'] : 'post';
    $where = "WHERE post_type = '$post_type' AND post_status = 'publish'";
    return $where;
}
add_filter( 'getarchives_where', 'my_custom_post_type_archive_where', 10, 2 );

そして、表示させたいところに、下記を書きます。

<?php $args = array(
    'post_type' => 'report',
    'type' => 'monthly',
    'echo' => 0
);
$list = wp_get_archives($args);
echo "<ul>$list</ul>";
?>

$argsに渡せるものは、コデックスのwp_get_archivesを参考にすると、取得するアーカイブ数(limit)、リストの形式(format)、投稿数表示の有無(show_post_count)などがあるようです。

また、typeにはyearly、monthly (初期値)、daily、weekly、postbypostが指定できます。

ちょっとだけ研究

functions.phpに追加したフィルターですが、
wp_get_archives()の定義の中に、

$where = apply_filters( 'getarchives_where', "WHERE post_type = 'post' AND post_status = 'publish'", $r );

という行がありまして、これのWHERE文の部分を、下記と置き換えておるようでした。

$where = "WHERE post_type = '$post_type' AND post_status = 'publish'";

なるほどー。。

参考リンクとお世話になった方々

上記コードの出どころ。
Custom Post Type Archives by Year & Month? | WordPress Answer

@hissyNCさん、ありがとうございましたm(__)m
@wokamotoさん、今後ともよろしくお願いしますm(__)m

この記事が気に入ったら
フォローしてね!

よかったらシェアしてね!

著者について

コメント

コメント一覧 (4件)

コメントする

目次
閉じる