たまに年度別に記事を表示する時とか、結構忘れがちなので表示方法のメモです。
表示に使うファイルはカスタム投稿タイプの『archive-投稿タイプ.php』の形式です。
プラグインは『CPT-UI』。サンプルコードのカスタム投稿タイプ(yearpost)を作成し、『wp-pageNave』でページネーションも実装しています。
年度別の表示をする際のコード全体
まずはコードの全体図。
<ul>
<?php
$paged = get_query_var('paged')? get_query_var('paged') : 1;
$args = array(
// 何ページ目を指定してサブクエリを取得する
'paged' => $paged,
'post_type' => 'yearpost',
'posts_per_page' => 4,
'year' => $year
);
$the_query_news = new WP_Query($args);
?>
<?php if ( $the_query_news->have_posts() ) : ?>
<?php while ($the_query_news->have_posts()) : $the_query_news->the_post(); ?>
記事内容HTML
<?php endwhile; ?>
<?php endif; wp_reset_postdata(); ?>
<?php if( function_exists( 'wp_pagenavi' )) {
wp_pagenavi(array('query'=>$the_query_news));
} ?>
</ul>
『wp-pageNavi』のエラー対策
pagedを都度、明示的にしてあげないと動いてくれないため、下記のコードを記載しています。
現在のページ番号を取得しており、デフォルトでは1を代入します。
$paged = get_query_var('paged')? get_query_var('paged') : 1;
pagenaviを呼び出す関数でも明示的にどのクエリを使うか指定してあげないとおかしな動きをします。そのためwp_pagenavi()に引数『’query’=>$the_query_news』を記述しています。
引数の指定がないと、メインクエリに基づいてページナビを作成してしまうためなのか、特定のカスタムクエリ明示的に指定してあげる必要があります。
<?php if( function_exists( 'wp_pagenavi' )) {
wp_pagenavi(array('query'=>$the_query_news));
} ?>
年度別記事のリンクを表示する
2024年、2023年など年度ごとに記事をソートして表示したい場合もあります。
これも意外と癖があってハマりました。
アーカイブリンクの作成はwp_get_archivesを使います。
カスタム投稿タイプの場合は必ず投稿タイプを明示的に指定します。「post_type=yearpost」の部分ですね。
「post_type=post」だと、wordpressのデフォルトの投稿数を取得してしまうので注意です。
<?php wp_get_archives( 'post_type=yearpost&type=yearly&show_post_count=1' ); ?>
「type=yearly」により年度ごとの一覧リンクを作成し、
「show_post_count=1」によってその期間内の投稿数を表示。0の場合は投稿数は表示されません。