メインクエリを実行する前に、クエリ内容を変更できるアクションフックです。クエリオブジェクト(問い合わせ内容のオブジェクト)が生成された後、実際にデータベースに問い合わせを行う前に発火します。そのため、メインクエリを変更することができます。
アクションフックにコールバック関数を登録するテンプレートタグadd_actionと一緒に使います。下記のコードはアクションフックpre_get_postsにコールバック関数news_postsを登録しています。(詳しくは参考コードを参照ください。)
add_action('pre_get_posts', 'news_posts');下記コードはメインクエリを任意の条件に上書きする処理です(functions.phpに記述)。10行目でadd_actionを使ってアクションフックpre_get_postsにコールバック関数news_postsを登録しています。1~9行目でnews_postsを作成しており、メインクエリの内容を上書きする処理が書かれています。(newsというカスタム投稿タイプにおいて1ページあたりの投稿件数を8件にしています。)
結果、pre_get_postsが発火したタイミングでnews_postsが実行され、メインクエリが変更されます。
function news_posts($query) {
if (is_admin() || ! $query->is_main_query()) {
return;
}
if ($query->is_post_type_archive('news')) {
$query->set('posts_per_page', '8');
return;
}
}
add_action('pre_get_posts', 'news_posts');※当サイトでは初期値とデフォルト値の言葉の定義を区別せず、原則統一して初期値を採用しています。