WEB制作のための情報サイト / unazuki Library

pre_get_posts

基本構文と使い方

基本構文

メインクエリを実行する前に、クエリ内容を変更できるアクションフックです。クエリオブジェクト(問い合わせ内容のオブジェクト)が生成された後、実際にデータベースに問い合わせを行う前に発火します。そのため、メインクエリを変更することができます。

アクションフックにコールバック関数を登録するテンプレートタグ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');

※当サイトでは初期値とデフォルト値の言葉の定義を区別せず、原則統一して初期値を採用しています。

関連するテンプレートタグ

テンプレートタグ 説明
after_setup_theme テーマが読み込まれた後に発火するアクションフック
do_action() 指定したアクションフックに登録されたコールバック関数を呼び出して実行する
add_action() アクションフックにコールバック関数を登録する