年度別記事一覧の表示 / WP_Query

公開記事一覧を「年度」別で、かつページネーション(ページ送り)付きで表示する方法を模索してみました。すでに関連記事を公開されている方々がいらっしゃいましたので、それらの記事を参考(ほぼ参照)にしつつ、ページネーション用にいくつか処理を追加してみました。できていない処理がありますが、それについては最後に触れます。

目的の表示条件と考え方

表示の条件

表示の条件は下記のようにしたとします。

  • カスタム投稿を指定
  • 特定タクソノミーの特定ターム、かつ特定カスタムフィールドキーの特定カスタムフィールド値で絞り込み
  • 年度(4.1〜3.31)別に表示

実装の考え方

下記の考え方で実装したとします。

  1. 年度表示用関数の定義
    • 1-i. WP_Queryをセット
    • 1-ii. WP_Queryループ開始
    • 1-iii. 1ページに表示する年度の数以内であれば表示
    • 1-iv. 表示した年度をカウント
    • 1-v. WP_Queryループ終了
  2. 実行
    • 2-i. ページ毎に表示する最初の年度を指定
    • 2-ii. カスタム投稿内の一番古い記事の年を取得(他条件はとりあえず含めない)
    • 2-iii.年度表示用関数の実行
    • 2-iv. 年度表示用関数の終了
    • 2-v. 総ページ数の設定
  3. ページネーション表示
  4. $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に知らせることができればいいのですが、これといった方法が現在のところ「わからない」という状況です。

以上です。