質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

1670閲覧

wp_query:ループ処理の解釈についての質問

YousukeTanaka

総合スコア79

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2015/12/17 17:14

編集2015/12/17 17:18

以下のコードの解釈に頭を悩ませております。教えていただければ嬉しい限りです。
このコードは、Wordpress Codex日本語版(http://wpdocs.osdn.jp/Class_Reference/WP_Query)に掲載されているものです。特に、解釈が難しいコードは以下のコードです。

①$the_query = new WP_Query( $args );

これは調べると、「新しくオブジェクトを作成」という意味とのことです。
疑問:なぜ新しくオブジェクトを作成する必要があるのか?
どういうときに新しいオブジェクトを作成するのか?

②$the_query->have_posts()
これも頻繁に見かけます。調べると、このアロー演算子には、「変数「the_query」の中の
「have_posts()」を実行せよ。」という意味があるとのことです。

2-1:それを踏まえ、文脈に照らせば、以下のように解釈しましたが、この解釈であっていますでしょうか?
「もし、変数the_queryの中の投稿を実行するなら、ulを表示しなさい。そして、同様に投稿があればループを回し、titleを獲得しなさい。そうでなければ、「no posts found」を表示しなさい。」
2-2:「$the_query->the_post();」(while文の後のこの文章の存在が理解できない。なぜ、もう一度かいたのか?)

③wp_reset_postdata();
3-1:これの理解は、$postのリセットという理解ですが、この理解でよいでしょうか?
3-2:wp_reset_query()との違いがいまいちわかりません。

④wp_query();
全体的に見て、結局、wp_query();がどんな役割を果たしていたのかがよくわかりませんでした。今後、どのような文脈で使っていけばよいのでしょうか?

以上、よろしくお願いいたします。

<?php // The Query $the_query = new WP_Query( $args ); // The Loop if ( $the_query->have_posts() ) { echo '<ul>'; while ( $the_query->have_posts() ) { $the_query->the_post(); echo '<li>' . get_the_title() . '</li>'; } echo '</ul>'; } else { // no posts found } /* Restore original Post Data */ wp_reset_postdata();

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

①$the_query = new WP_Query( $args );
サブループで使う。メインループではグローバル変数に入っているWP_Queryが使われる。

②$the_query->have_posts()
the_post()はグローバル変数のpostの値を次のものに入れ替えているので必要

③wp_reset_postdata();
http://wpxtreme.jp/understanding-wordpress-loops-and-queries

④wp_query();
サブループで使う。

投稿2019/09/29 13:52

msiqb

総合スコア43

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

下記の記事を見ると使いどころとメリットが分かりやすいと思います。
http://sole-color-blog.com/blog/php/265/

WordPressには便利なテンプレートタグなどがたくさんありますが、
やりたいことを100%カバーしてくれるものではありません。
そのため、自分で必要な条件などを指定して投稿記事などを出力するためにWP_Query()を使います。

$the_query->have_posts() の解釈ですが、個人的には記事全部取得しろというように思っています。
$the_query->the_post();ですが、これはカウント用です。
これがないと永遠に最初の記事が出力され続けることになります。何番目の記事という指定のために必要です。
ループの仕組みはhttp://www.tecking.org/archives/2830
が参考になります。

全体の解釈としては、該当記事があるなら(if条件)<ul></ul>を表示させその中に、該当記事全てのうち(while条件)n番目の記事($the_query->the_post();)のタイトルを<li></li>で囲って出力させ、これを$wp_query内の記事数 > 0 になるまで繰り返す(while動作)ということです。

wp_reset_postdata()とwp_reset_query()はリセット対象が違います。
query_postsを使うとメインループの$wp_queryが変更され、それを元に戻すのがwp_reset_query()です。
wp_reset_postdata()はグローバル変数の$postを書き換えてしまうもの(the_post();とか)を使っている場合、元に戻すのに使います。

投稿2015/12/26 07:33

編集2015/12/26 07:52
y-neon

総合スコア106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問