第1.5回の勉強会では、勉強会の一覧をどう見せるかから、終了したイベントを一覧でどう見せるかを検討することに発展し、「イベント一覧から終了したイベントを見えなくする方法」について検討しました。
結果から言うと、カスタム分類を利用して「イベントのステータス」という分類を増やし、ここで「過去の勉強会」と選択した場合に、勉強会の一覧から除外するように実装しました。
つまり、カスタム投稿のアーカイブから特定のタームを除外して一覧を表示することとしました。
実装結果については勉強会の一覧をごらんください。
その方法は、functions.phpにpre_get_postでメインクエリーを操作する、というものです。
書き方は下記などを参照しました。
http://notnil-creative.com/blog/archives/1688
http://web-taiyo.com/works/130125.html
実際に書いてあるコードは下記です。
function customize_main_query($query) { if ( is_admin() || ! $query->is_main_query() ) return; $tax_query = array( array( 'taxonomy' => 'lesson_status', 'field' => 'slug', 'terms' => 'done', 'operator' => 'NOT IN' ) ); if ( $query->is_post_type_archive('lesson') ) { $query->set( 'tax_query', $tax_query); } if ( $query->is_tax( 'lesson_cat' ) ) { $query->set( 'tax_query', $tax_query); } } add_action( 'pre_get_posts', 'customize_main_query' );
先に結果を書きましたが、そこに至るまでの流れについてもまとめておきます。
イベント一覧にどのようにイベントが並んでいてほしいか?ということを考えていたところ、「直近に開催するイベントが一番最初に出ていてほしい」「その次の開催が次にくるように」「終了したイベントは一覧になくてもいい」このような意見が出ました。
それをどのように実装するかを検討しました。
単純に日付の早い順で考えれば「直近に開催するイベントが一番最初に出ていてほしい」「その次の開催が次にくるように」が解決できますが、そのためには「終了したイベントを一覧で非表示にする」ことが必要です。
また、イベントの並び順については、イベントの開始日を参照して並べ変える方法と同時に、記事を並べ変えるプラグインなどを利用して手作業で並べる方法も検討しました。結果、その方が融通がきくことから、今回はそちらを採用しています。
さて、終了したイベントを見えなくする方法について、次のような意見が出ました。
・イベント終了日と本日の日付を比較して条件分岐し非表示にする
・手動で記を下書きにする
・別のカテゴリーにする
以上のようなものがありました。
この中で、「記事を下書きにする」方法については「過去にあったイベントを参照したいときもある」という意見があったため、不採用としました。
イベントの終了日と本日の日付を比較して条件分岐、については、部分的に採用しました。例えば、イベントが終了すると「このイベントは終了しました」などの文章がでたり、不要な項目を非表示にするなどです。
結果的には「終了したイベントのみの一覧も同時に作ることが可能」ということから、カスタム分類を追加しました。
イベントの情報はもともと「イベントのカテゴリー」というカスタム分類を設定してありました。今回はこの分類とは別に「イベントのステータス」というカスタム分類を用意して、そこに「過去のイベント」という分類をつくり、その分類に属する記事を「イベントのアーカイブ」と「イベントのカテゴリーのアーカイブ」両方から除外するように設定してあります。
カスタム分類の設定コードは下記の通りです。
function create_tax_init() { // 勉強会のカテゴリー register_taxonomy( 'lesson_cat', 'lesson', array( 'label' => __( '勉強会のカテゴリー' ), 'hierarchical' => true, ) ); // 勉強会のステータス register_taxonomy( 'lesson_status', 'lesson', array( 'label' => __( '勉強会のステータス' ), 'hierarchical' => true, ) ); } add_action( 'init', 'create_tax_init' );
カスタム分類についてはまた別の機会に解説します。