calendarcodediamondfacebookfingerglobalgoogleplushatenahomepagetopplainpocketrssservicetwitterwordpresshome2searchfoldernext-arrowback-arrowfirst-arrowlast-arrow

WordPress:pre_get_postsを用いてカテゴリページや検索結果の表示を調整する

pre_get_posts

今回はアクションフックを使って、カテゴリページの表示件数や、検索結果で5年以内の記事を返すなど「表示の調整」を行う方法をご紹介します。例えば管理画面で投稿記事は10件に設定しているけれどカテゴリーページは15件の表示をしたいとき。または、古い検索結果は出力したくないといったように、メインクエリに対する操作を行いたいときはアクションフックpre get postsを使います。

Sponsored Link

pre_get_posts

pre_get_postsはデータベースへの検索が行われるクエリ実行前(記事データの問い合わせ前)に呼び出されます。WP_Queryがセットアップされる前に実行されるので、データベースへの問い合わせが1度で済むので高速であり、functions.phpの中に書くことで保守性が高くなります。

pre_get_posts とWP_Queryの違い

WP_Queryとどう違うのか比較すると、以下のようになります。カテゴリページや検索結果ページで使うことが多いです。

WP_Query pre_get_posts
定義 クラス アクションフック
使う場所 メインページ、固定ページ カテゴリ、検索結果ページ、メインページ
記入の場所 テンプレートファイル functions.php

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カスタマイズに便利なテクニック一覧

スポンサード リンク

この記事を書いた人
投稿者:commte

株式会社コムテ代表取締役。2015/8:弊社にてWeb制作スクールを開始。 WebDesign + Web制作 (最新情報 配信)。おっとりした話し方をするおっさん。

URL:西田 鉄平
この後によく読まれている記事

Comments

Leave a Comment

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください