カスタム投稿タイプにはいつも悩んでしまうのですが、下記のような条件でサイドバーに月別アーカイブを出したい時のやり方です。
- カスタム投稿タイプ
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件)
はじめまして、同じことをしようとしておりまして、上記のコードを試して見たところアーカイブリンクは
/report/date/2012/08
ではなく
/2012/08/
のようになりました。
また、リンク先のページが404となるのですが、こちらは何を用意すれば良いでしょうか。
こんにちは。
通常の投稿のパーマリンクは、/report/%post_id%にしていますか?
[…] https://nskw-style.com/2012/wordpress/customize/custom-post-type-archive-link.html […]
カスタム投稿タイプでの月間アーカイブを表示させたいと思いいくつかの記事をみてここに辿りつきました。
こちらで紹介されているコードを試したところ、カスタム投稿タイプ名report/%post_id%で表示さず、hp-url/date/2016/12?post_type=reportとカスタム投稿タイプ名がなくなって表示されてしまいます。どうしたら、カスタム投稿タイプ名を出せるのでしょうか?