情報を追記している場合はありますが、古い情報を訂正はしていませんので、公開年月日を参照してください。プラグイン・タグ、いずれもワードプレス・PHPのバージョン等によって動作しない場合もあります。
pre_get_posts はfunctions にまとめて書けるのでカテゴリーテンプレートなどにquery_posts で書くよりも随分と楽だし、よくある「ページングが上手くいかない」という悩みもなくなる。
カテゴリーによって表示件数を変えたい、というのも、これで楽に解決する。
以下、カスタム投稿「イベント」のアーカイブでは「これからのイベント」を表示、過去のイベントを表示するためのカスタム分類とタームを作成し(投稿時には過去のイベントタームを選択しておく)、そちらでは過去のイベントを表示する設定
// これからのイベント function change_order_for_event( $query ) { if ( ! is_admin() && $query->is_main_query() && (is_post_type_archive('event') ) ) { $query->set( 'meta_key', 'date' ); $query->set( 'meta_value', date('Y-m-d') ); $query->set( 'meta_compare', '>=' ); $query->set( 'orderby', 'meta_value' ); $query->set( 'order', 'ASC' ); } } add_action( 'pre_get_posts', 'change_order_for_event' ); // 過去のイベント function change_order_for_past( $query ) { if ( ! is_admin() && $query->is_main_query() && (is_tax('past')) ) { $query->set( 'post_type', 'event' ); $query->set( 'meta_key', 'date' ); $query->set( 'meta_value', date('Y-m-d') ); $query->set( 'meta_compare', '<' ); $query->set( 'orderby', 'meta_value' ); $query->set( 'order', 'DESC' ); } } add_action( 'pre_get_posts', 'change_order_for_past' );
表示件数を変えたい時は
function change_order_for_movie( $query ) { if ( $query->is_main_query() && (is_post_type_archive('movie')) ) { $query->set( 'posts_per_page', 10 ); } } add_action( 'pre_get_posts', 'change_order_for_movie' );
カテゴリー・子カテゴリーの設定をするときは (is_category(‘1’) || ($category->parent = ‘1’))
イベント管理・カレンダーに関する記事一覧
- is_main_query(pre_get_posts) でイベントの分類、その他(2012.08.30作成)
- イベントの開催中・終了などを表示(2012.09.27作成)
- 予約カレンダー・フォームのプラグイン(2013.08.15作成)
- 色々な用途に使えそうなカレンダー(2016.04.22作成)