WP-QueryはWordPressのクラスで、自分の作ったWordPressの固定ページや投稿ページから、例えば同じカテゴリーやタグの投稿ページの情報を取得したりできます。情報を取得できるので、その中からタイトルやリンクや本文等を他のページに表示させることができます。
ページ内リンク
WP-Queryの実例コード
<?php $wpwp_posts = new WP_Query( array('cat'=>2,'posts_per_page' => -1)); ?> <?php if ( $wpwp_posts->have_posts() ) : while ( $wpwp_posts->have_posts() ) : $wpwp_posts->the_post(); ?> <?php the_title(); ?> <?php the_content(); ?> <?php endwhile;?> <?php wp_reset_postdata();?> <?php else :?> 記事はありません。 <?php endif; ?>
実例コードの解説
全ての投稿ページの中からカテゴリーID「2」の記事の情報を取得し、その投稿ページのリンク付きの「タイトル」と「本文」を、「投稿日」の「新しい順」に「全て」表示させる、というものです。
new WP_Query()
2行目の$wpwp_posts = new WP_Query()は「new WP_Query()」の取得する条件内容を変数「wpwp_posts」に格納しています。
if ( $wpwp_posts->have_posts() )
4行目のif ( $wpwp_posts->have_posts() )は「if文」で、もし変数「wpwp_posts」に格納されている「new WP_Query()」の取得条件のページがあるなら、という意味です。
外部参考サイト:if文 – Wikipedia
while ( $wpwp_posts->have_posts() )
5行目のwhile ( $wpwp_posts->have_posts() )の「while」というのはループと呼ばれるもので、変数「wpwp_posts」に格納されている条件内容が存在する限り、繰り返し処理する、という事です。
外部参考サイト:while文 – Wikipedia
つまり変数「wpwp_posts」に格納されている「new WP_Query()」の取得条件のページがある限り繰り返す、という事です。
$wpwp_posts->the_post()
同じ5行目の$wpwp_posts->the_post()の「the_post()」が「while」で繰り返されるのを1つづつ次に進めていくというものです。
外部参考サイト:関数リファレンス/the post – WordPress Codex 日本語版
この「the_post()」がなく「while」だけだったら、最初に条件内容で取得した投稿ページ情報、例えば投稿ページのタイトルとしたら、同じタイトルばかりを永遠に表示(ループ)してしまう事になります。
「the_post()」があると最初の投稿ページのタイトル、その次の投稿ページのタイトル、その次…とあるだけ順番に表示してくれます。
テンプレートタグ
7-8行目はテンプレートタグで、取得したページの情報の中からthe_permalink()はページのリンク、the_title()はページのタイトル、the_content()はページの本文を表示させます。
テンプレートタグもたくさんあります。
外部参考サイト:テンプレートタグ – WordPress Codex 日本語版
endwhile
11行目のendwhileは「while」から「endwhile」までに書かれている内容を繰り返し行うというものです。
wp_reset_postdata()
12行目のwp_reset_postdata()は「the_post()」を一旦リセットします。
「while」の繰り返しの中から「the_post()」で一つづつ処理するので、「wp_reset_postdata()」1回リセットして、又繰り返すという役割があり、必ず記述しなければいけません。
else
13行目のelseは4行目の「if ( $wpwp_posts->have_posts() )」に対して変数「wpwp_posts」に格納されている取得条件のページが無かった場合、の処理をここに書きます。
この場合単純に14行目の「記事はありません。」です。
endif
15行目のendifは「if ( $wpwp_posts->have_posts() )」のif文の終了です。
if文はちゃんと終了させなければページがちゃんと表示されなくなるので気を付けてください。
実例コードのパラメーター
WP-Queryのパラメーターは引数(ひきすう)とも呼ばれ、ページの情報を取得し表示する為の「条件」の部分にあたるものです。
「実例コード」の中の2-3行目の‘cat’=>2,’orderby’=>date,’order’=>DESC,’posts_per_page’ => -1です。
「‘cat’=>2」はカテゴリーIDが2の投稿ページです。
2018年9月4日まで上記の様に
「‘orderby’=>date,’order’=>DESC,」
と記載していました。
しかしこれがサーバーのPHP72でエラー予告表示されます。
「‘orderby’=>date,’order’=>DESC,」この二つを削除するとエラー警告は消えます。
詳しくは
サイト内リンク:サーバーのPHP72でWp-Queryのエラー | HaradaWeb(ハラダウェブ)
に記載しています。
「‘orderby’=>date」は何を基準に順番に表示するかのパラメーターで、「date」は投稿日です。
「‘order’=>DESC」は順番を指定するパラメーターで、「DESC」は降順です。
「‘posts_per_page’ => -1」は情報を取得するページの数で、「-1」は全部という事です。
つまり「実例コード」のパラメーターは「カテゴリーID2の投稿ページを投稿日の新しい順番に全部」という条件です。
WP-Queryのパラメータ
WP-Queryのパラメーターはたくさんあります。
このページでは紹介しきれませんので、
外部参考サイト:関数リファレンス/WP Query – WordPress Codex 日本語版
をご覧ください。
後日HaradaWebでも紹介したいと思います。
WP-Queryのコードをどこに書き込むのか
WP-Queryのコードを作ったとして、それをどこにどのようにして書き込むのか。
管理画面の投稿ページ内の文字入力するところにWP-Queryのコードを書き込んでも反映されません。
セキュリティ上WP-QueryのコードのようなPHPは文字入力できるところには書き込めないようになっています。
テンプレートに設定する
テンプレートファイルの中に貼り付ける方法を解説します。
ただしこの場合はWordPressを「子テーマ」でサイト運営していないと、親テーマをそのまま使っている場合は、WordPressのアップデートでデフォルト化されてWP-Queryのコードが消されてしまいます。
残しておくためには、サイト運営で子テーマを設定して、その中にテンプレートをダウンロードさせて、WP-Queryを張り付けてサーバーの子テーマ内に、同じ階層を設定して、テンプレートファイルを編集してアップロードします。
子テーマの設定方法については
外部参考サイト:子テーマ – WordPress Codex 日本語版
をご覧ください。
HaradaWebでも後日掲載します。
WP-Queryをショートコードで投稿部分に設定する場合
ショートコードで張り付ける場合は本文を入力する所に貼り付ける事ができます。
ショートコードを使うと本文の途中にWP-Queryを設定する事ができるので便利です。
ショートコードの設定方法は
サイト内リンク:WordPressで投稿・固定ページでphpファイルを親子テーマで利用できるショートコード | HaradaWeb(ハラダウェブ)
でご確認ください。
WP-Queryで取得する情報の中にはカスタムフィールドも
WP-Queryで取得するページの情報の中にはカスタムフィールドも含まれています。
これを利用して固定ページや投稿ページにカスタムフィールドを設定して、WP-Queryで呼び出すこともできます。
まとめ
WP-QueryはWordPressをカスタマイズするにはとても便利なクラスです。
覚えればいろいろなことができます。
例えばカスタムフィールドに数値を入れれば自動的に計算されてその結果が別のWP-Queryを設定しているページに自動的に表示されたりするので、商品を仕入れて仕入れページに商品の仕入れ値と売値と数を入力するだけで、サイトの売り場ページや在庫ページや管理者だけが観れる商品管理ページ等に自動的に反映され、人手で打ち込むのは一度だけなので間違いも起こりにくくなります。
最初は簡単な使い方から経験して色々な事が出来ればサイト運営の幅が広がり楽しくなると思います。