WordPress:pre_get_postsを用いてカテゴリページや検索結果の表示を調整する
今回はアクションフックを使って、カテゴリページの表示件数や、検索結果で5年以内の記事を返すなど「表示の調整」を行う方法をご紹介します。例えば管理画面で投稿記事は10件に設定しているけれどカテゴリーページは15件の表示をしたいとき。または、古い検索結果は出力したくないといったように、メインクエリに対する操作を行いたいときはアクションフックpre get posts
を使います。
エンジニア速報は Twitter の@commteで配信しています。
pre_get_posts
pre_get_postsはデータベースへの検索が行われるクエリ実行前(記事データの問い合わせ前)に呼び出されます。WP_Queryがセットアップされる前に実行されるので、データベースへの問い合わせが1度で済むので高速であり、functions.phpの中に書くことで保守性が高くなります。
pre_get_posts とWP_Queryの違い
WP_Queryとどう違うのか比較すると、以下のようになります。カテゴリページや検索結果ページで使うことが多いです。
pre_get_postsの基本的な記述例
is_main_query()
はメインクエリ(記事データ)、is_admin()は管理画面のことで、管理画面とメインクエリ以外では適用しないという記述をしておきます。$query->set
ではパラメータと値をセットします。
add_action( 'pre_get_posts', function( $query ) {
if ( is_admin() || ! $query->is_main_query() ) { // 管理画面またはメインクエリ以外で
return; // 適用しない
}
if ( 条件 ) {
$query->set( 'パラメータ', '値' );
return;
}
} );
アーカイブページかつスマホの時は表示件数を14件に変更する
例えばスマホのアーカイブページで最大表示件数を変更したい場合。1ページあたりの表示件数を指定できるposts_per_page
をパラメータに設置します。こんなに短い記述で調整できるので便利ですね。
add_action( 'pre_get_posts', function( $query ) {
if ( is_admin() || ! $query->is_main_query() ) {
return;
}
if ( $query->is_archive() && wp_is_mobile() ) {
$query->set( 'posts_per_page', 14 );
return;
}
} );
検索結果で5年以内の記事を返す
検索結果で○年以内のものを返すケース。他に○○年以降という指定もできます。これを実現するには、複雑な指定ができる日付パラメータdate_query
を使います。afterは指定した日付より後、beforeは指定した日付より前の投稿を取得します。「1 year ago」や「2017-01-10」といった表記が使えます。
add_action( 'pre_get_posts', function( $query ) {
if ( ! is_admin() && $query->is_main_query() ) {
if ($query->is_search) {
$query->set( 'date_query',
[ [
'after' => '5 year ago', // 5年以内
// 'after' => '2017-01-10', // 2017年1月10日以降
// 'before' => '2017-01-10', // 2017年1月10日以前
] ]
);
}
}
} );
Plugin API/Action Reference/pre get posts « WordPress Codex
WordPressカスタマイズに便利なテクニック一覧
- [開発環境] WordPressをコマンドでインストールする
- [開発環境] Vagrant+Virturlbox+VCCWの使い方
- [雛形] WordPressのif文(条件分岐)
- [雛形] 便利なテンプレートタグ
- [構築] functions.phpに書いておくべきこと
- [構築] パンくずリストを出す方法
- [構築] コメントを設置する簡単な方法
- [管理画面] プラグインの自動更新通知メールを停止させる
- [管理画面] 管理画面のユーザーページに項目を追加する
- [管理画面] カスタムポストを追加する
- [翻訳] 多言語サイトを作るプラグイン「bogo」の使い方
- [フォーム] 「MW WP Form」の使い方と住所自動入力
- [関連記事] プラグインを使わずにWordPressで関連記事を出す方法
- [SEO] タイトルのカスタマイズ
- [pre_get_posts] カテゴリページや検索結果の表示を調整
スポンサード リンク
関連記事
- WordPressプラグインの自動更新通知メールを停止させる
- WordPress:タイトルを自在にカスタマイズする方法
- プラグインを使わずにWordPressで関連記事を出す方法
- WordPressプラグイン「MW WP Form」の使い方と住所自動入力(郵便番号で動かない場合)
- WordPressでカスタムポストを追加するシンプルな方法
- WordPress管理画面のユーザーページに項目を追加する
- よく使うWordPressのif文(条件分岐)まとめ
- WordPressでパンくずリストを出す方法
- WordPressテーマ作成の時に覚えておくと便利なテンプレートタグ
- WordPressのfunctions.phpに書いておくと捗ること
Leave a Comment