公開記事一覧を「年度」別で、かつページネーション(ページ送り)付きで表示する方法を模索してみました。すでに関連記事を公開されている方々がいらっしゃいましたので、それらの記事を参考(ほぼ参照)にしつつ、ページネーション用にいくつか処理を追加してみました。できていない処理がありますが、それについては最後に触れます。
目的の表示条件と考え方
表示の条件
表示の条件は下記のようにしたとします。
- カスタム投稿を指定
- 特定タクソノミーの特定ターム、かつ特定カスタムフィールドキーの特定カスタムフィールド値で絞り込み
- 年度(4.1〜3.31)別に表示
実装の考え方
下記の考え方で実装したとします。
- 年度表示用関数の定義
- 1-i. WP_Queryをセット
- 1-ii. WP_Queryループ開始
- 1-iii. 1ページに表示する年度の数以内であれば表示
- 1-iv. 表示した年度をカウント
- 1-v. WP_Queryループ終了
- 実行
- 2-i. ページ毎に表示する最初の年度を指定
- 2-ii. カスタム投稿内の一番古い記事の年を取得(他条件はとりあえず含めない)
- 2-iii.年度表示用関数の実行
- 2-iv. 年度表示用関数の終了
- 2-v. 総ページ数の設定
- ページネーション表示
- $postをリセット
プレビュー
使用する変数
用途別に変数を整理します。
グローバル変数
- $post / 投稿データ
- $wpdb / クエリの発行用
- $wp_locale / 日付フォーマット(いらないかも)
WP_Query 設定用独自変数
- $target_post / 投稿スラッグ
- $target_post_cat / タクソノミースラッグ
- $target_cat_slug / タームスラッグ
- $target_meta_key / カスタムフィールドキー
- $target_meta_value / カスタムフィールド値スラッグ
- $order / 表示順序
年度別表示用独自変数
- $paged / 現在のページ送り番号 ( 指定済みであれば必要なし )
- $max / 1ページに表示する年度の数
- $start_month / 年度の始め月
- $count_per_page / 表示した年度をカウント
- $offset / 表示する年度をオフセット
- $total / 総ページ数
実際のコード
参考にした記事URLはコード内に記載してあります。
関数の定義と呼び出し
普段はjade(pug)を使っているので、その内容を記載します。ループ表示の設定をテンプレート側で行いたかったので、下記のような形にしてあります。独自変数を関数の外で定義しているのは、使い回しをしやすくしたり、後から見て使用独自変数を確認しやすくするためだけの理由です。
archive_fiscal_year.pug(固定ページテンプレート内)
関数内でループさせるWP_Queryの設定
date_query() まわりの設定は参考URLそのままの内容です。一部を変数化したのみです。
set_wpquery_fiscal_year.php
関数の実行とページネーション用の処理
こちらもほとんど参考URLの内容です。$totalの計算は表示されるページ毎に行う必要があったので、変数ベースで処理しています。WP_Queryの設定と合わせて関数化後、function.phpに突っ込んでも問題ないかと。
archive_fiscal_year.php
補足
ループ用mixinを使ってます。
さいごに
ページネーションの設定に無理やり感はありますが、これで目的の表示はできました。ただ、このコードですが「<link rel=”prev”〜>」と「<link rel=”next”〜>」タグに対応できていません。$totalの値をWordPressに知らせることができればいいのですが、これといった方法が現在のところ「わからない」という状況です。
以上です。