投稿一覧をカスタムフィールドの値でフィルタする

やりたかった内容は以下。

  • カスタム投稿タイプ”event”でイベント開始日, 終了日などをカスタムフィールドで設置
  • eventアーカイブページで月間カレンダー表示
  • 管理画面は、カスタムフィールドの開始日の降順で表示
  • 管理画面はイベント開始月でフィルタする

ってな感じ。表示側は以前get_calendarを真似て作ったことがあったので、比較的大きく躓くことなく表示できた。
しかし、管理画面は通常、投稿作成日で並んでしまう…。これ以前作った時は作らなかったんだけど、入力してるととても見づらい (*_*)

多分、pre_get_postsとかでやれば出来るんだろうなぁと思ったままだったので、今回は(避けずにw)やってみた。

基本、custom field – Filter post listing by meta value which is a date – WordPress Development Stack Exchange の記事と、偶然見つけた /wp-admin/includes/class-wp-list-table.php を参考にさせていただきました。
一緒に偶然見つけた /wp-admin/includes/class-wp-list-table.php も見てたら、分かり易かった (^^)

先ずは一覧にイベント日付を追加

  • カスタムクエリを追加
  • イベント開始日カラムを追加
  • デフォルトの投稿日カラムを削除
  • イベント開始日データをY/m/dで表示
  • デフォルトの日付フィルタを削除
  • 開始日カスタムフィールドの年月ドロップダウンを追加
  • 月内のイベントをフィルタするよう追加

といった感じ。
これなら、ザクザク追加してもフィルタできるから一覧しやすい 😀

[php]
<?php
$meta_query[] = array( ‘key’ => ‘event_date’,
‘value’ => array( $month->format( ‘Ymd’ ), $month->format( ‘Ymt’ ) ),
‘compare’ => ‘BETWEEN’,
);
[/php]

の部分がなるほど!! っとスッキリした (^^)
ほんと、ありがとうございます!!

表示側は、トップページに今週、アーカイブに月別のイベントを表示、管理画面はイベント月別でフィルタOKで、快適になった 😀

スクリーンショット 2016-04-14 18.35.33
5月で絞り込みできた 🙂

イベントのフィルタって、「向こう○ヶ月」とか「過去のイベント」とか「上半期」とかキーワードでもフィルタできそう。
一覧を開いたとき、今月分だけ表示ってしたかったけど、イベント追加する場合って、今月だけ見たいわけじゃないよなぁと思って止めてしまった ^^;

そうそう、WP_List_Table ってクラスも見つけたので、これもやってみたい (^^)

参考