WordPressのクエリについて

クエリについて

クエリの概念がわかりづらいので、丁寧に説明していきます。 クエリとは、WordPress内でどのようにループを行うのか指定する命令です。

クエリとメインクエリがあります。 WordPress標準で備わっているのがメインクエリです。

メインクエリ

メインクエリは表示しているページによって動きが変化します。
例えばindex.phpでは表示設定で入力した数字だけループを行います。 single.phpでは1度だけループし、カテゴリページではカテゴリ指定した記事のみを自動的にループしてくれる仕組みが最初から備わっているわけです。

サブクエリ

メインクエリ以外にループさせたいものがあった場合(例えばサイドバーに最新の記事一覧を表示させる等です。)、新しくクエリを自作しなくてはなりません。そこで使用するのはWP_Queryです。

サブクエリのサンプルです。

一行ずつ見ていきます。

どんなループを作るのか、決めて$argsに代入しています。
ちょいちょい忘れる『WP_Query』の使い方 | 予習と復習で、どのループをどんなふうに作るか わかりやすいと思います。 膨大にありますが、この組み合わせでWPのコンテンツをどのように見せていくのかが肝になって行きます。ここではposttypeで投稿記事だけを、postsper_pageで5だけ繰り返すと指定しています。

ここで$argsの入ったクエリを新たに作る宣言をしています。 その塊を$the_queryに代入しています。

while文でどれだけの間ループを繰り返すのかを決めています。この場合$the_queryの回数分、記事があるだけ繰り返す、という意味になります。

は単一のタイトルの表示を示します。

ここで、条件以外になったらループをやめます。

参考

関数リファレンス

WordPressで押さえておきたい!getposts,WPQuery,query_posts の違いと用例|TECHNICAL BLOG|株式会社エムハンド

WordPressテーマの「while (haveposts()) : thepost();」の意味は? | PHPプログラミングの教科書 [php1st.com]

WordPress ループ&クエリーのモヤモヤを解消しよう! | wpxtreme

pregetpostsアクションフックについて

pregetpostsはWordpressがメインクエリを実行する前に呼び出される「アクションフック」と呼ばれるもの。メインクエリの内容を変えたいときに利用するといい。 function.phpに記述していく。

一つづつ解説していきます

ここでフックの指定をしています。testpreget_postsはユーザー定義関数。

ifで条件を指定しています。ここではメインクエリかつ管理画面では適用しない、という条件になっています。ismainqueryは現在のクエリがメインクエリかどうかを判断する関数です。

更にはこんなふうに描くことも出来ます。

管理画面でメインクエリーで月別アーカイブの時に適用させる書き方です。

ここでも条件式を書いています。ishomeでトップページの場合次のクエリーの処理を実行するという意味です。
is
home()をis_category()とすればカテゴリーページのみの対象となります。

$query->set(‘パラメータ’,’値’)
とすることでさまさまな条件を指定できます。 例として

WordPressでホームやアーカイブ毎に表示条件を変える(ismainquery と pregetposts フック) – Gatespace’s Blog