HOME  /WordPress関数
 /アクションフック:pre_get_posts
2020年02月29日

アクションフック:pre_get_posts

アクションフック:pre_get_postsとは

アクションフックとフィルターフックの違いは下記を参照してください。

­ ­アクションフック、フィルターフックの違い

 

pre_get_postsはアクションフックで、WordPressがQueryを生成する前に呼ばれます。

よってこのアクションフックを利用して、ある条件下の投稿の並び順を変更する事ができます。

­ ­注意

このアクションフックの設定条件を間違えると、意図しない所の投稿の並び順も変わってしまいます。例えば

■ダッシュボードの投稿一覧

■ブログ投稿インデックスページ

■Wp_Queryで指定したサブループ

よって、このアクションフックを利用する場合は、投稿の並び替えを行う条件を間違えないで指定する事が重要です。

 

pre_get_postsのサンプル

投稿記事のデフォルトの並び順は「作成日が新しいもの順」となっています。

 

■確かに管理画面の投稿一覧はこの順番でなければ困ります。

■またブログ記事もこれで良いと思います。

 

しかしこのサイトの様な技術サイトの場合は

■一般カテゴリは作成日が古い順番から並んだ方が良い。

■Wordpress関数一覧カテゴリの場合はabc順に並んだ方が良い。

 

下記がこの条件をみたすサンプルプログラムになります。

当然、管理画面の並び順等が変更にならない様に注意して書きました。

function my_query( $query ) {
  if (is_category()){
      $query->set( 'order', 'asc' );
   }
  if(is_category('func')){
     $query->set( 'orderby', 'title' );
  }
}
add_action( 'pre_get_posts', 'my_query' );

※1.関数の引数$queryは参照変数で、なんでも構いません。

※2.カテゴリの表示順番(order)は、昇順 (asc)にする事により、古い投稿順に変更します。

※3.カテゴリのfunk(関数一覧)は、作成日順ではなくタイトル順(title)に変更します。

※4.この変更を「pre_get_posts」でクエリが生成される前に書き込みました。

尚、並び順にどの様なパラメータがあるか?は、下記のURLを参照してください。

­ ­関数:WP_Query

 

しかし、参照変数を使う書き方が気に入らない場合は、下記の様に記述する事もできます。

function my_query() {
  if (is_category()){
     set_query_var( 'order', 'asc' );
  }
 if(is_category('func')){
    set_query_var( 'orderby', 'title' );
 }
}
add_action( 'pre_get_posts', 'my_query' );

※1.set_query_varはグルーバル変数($wp_query)の中身を書き換えるラッパー関数です。

 

このアクションフックで良く使われる投稿の判定関数

判定関数 説明
is_admin() 管理画面の投稿一覧か否かのチェックに使います。
is_home() ホームページか否かのチェックに使います。
is_main_query() 現在のクエリーがメインクエリーか否かのチェックに使います。
is_search() 検索ページか否かのチェックに使います
is_category()

カテゴリページか否かのチェックに使います。

引数にスラグ等を指定する事ができます。

 

このサイトで、この関数を使っている所

サイドバーに表示しているあるカテゴリを選択した時の並び順を変更する為に利用しています。