このエントリーをはてなブックマークに追加

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’))

イベント管理・カレンダーに関する記事一覧

2012.08.30 投稿 2015.04.05 更新

新しい情報を追記している場合はありますが、古い情報の修正はしていません。投稿日・文中の日付を参照してください。

Recent Articles