WordPressでメインループの出力をカスタマイズする場合に使うのが pre_get_posts()
。書き方をまとめました。
<?php
//メインループを変更する場合。query_postは非推奨。pre_get_postsを使う。functions.phpに記述。
function change_posts_per_page( $query ) {
// おまじない
if ( is_admin() || ! $query->is_main_query() )
return;
// 以下にカスタマイズを記述
if ( $query->is_archive() ){
$query->set( 'posts_per_page', '5' );
}
}
add_action( 'pre_get_posts', 'change_posts_per_page' );
// 条件分岐の例
//アーカイブページ
if ( $query->is_archive() ) { ... }
// その他下記の条件分岐が使えます(WordPress3.5.1時点 抜粋)。
// 投稿タイプアーカイブ(引数は投稿タイプ名, または配列)(ラベルではない)
$query->is_post_type_archive( $post_types ) { ... }
// 著者アーカイブ(引数は著者ID, ニックネーム, 表示名, またはそれらの配列)
$query->is_author( $author ) { ... }
// カテゴリーアーカイブ(引数はカテゴリーID, スラッグ, 名前,またはそれらの配列)
$query->is_category( $category ) { ... }
// タグアーカイブ(引数はタグスラッグ, またはその配列)
$query->is_tag( $slug ) { ... }
// タクソノミーアーカイブ(引数はタクソノミーのスラッグと、タームのID,名前,スラッグ,またはそれらの配列)
$query->is_tax( $taxonomy, $term ) { ... }
//日付アーカイブ
$query->is_date() { ... }
// フィード(引数はフィードの種類)
$query->is_feed( $feeds ) { ... }
// フロントページ
$query->is_front_page() { ... }
// 固定ページ(引数はページID, タイトル,スラッグ, またはそれらの配列)
$query->is_page( $page ) { ... }
// 検索結果
$query->is_search() { ... }
// 投稿(引数は投稿ID, タイトル, スラッグ, またはそれらの配列)
$query->is_single( $post ) { ... }
// どの投稿タイプのシングルか(引数は投稿タイプ,またはその配列)
$query->is_singular( $post_types ) { ... }
// 404
$query->is_404()