当サイト、Codex 日本語版は今後積極的な更新は行わない予定です。後継となる新ユーザーマニュアルは、https://ja.wordpress.org/support/ にあります。
万が一、当サイトで重大な問題を発見した際などは、フォーラムWordSlack #docs チャンネルでお知らせください。</p>

「関数リファレンス/WP Query」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(言語間リンク・原文リンク挿入ほか微調整)
({{原文|Function Reference/WP Query|84523}}<!-- 15:54, 20 March 2010 Droope 版 -->)
1行目: 1行目:
 
==WP_Queryの役割==
 
==WP_Queryの役割==
  
<tt>WP_Query</tt>は<tt>wp-includes/query.php</tt>に定義されているクラスで、WordPressブログへの複雑なリクエストを取り扱います。<tt>wp-blog-header.php</tt>(バージョン2.0ではWPクラス)が<tt>$wp_query</tt>オブジェクトに現在のリクエストを定義する情報を与えることで、<tt>$wp_query</tt>は扱うべきはどのタイプのクエリなのか(カテゴリーアーカイブ? 年月別アーカイブ? フィード? 検索?)ということを理解し、要求された投稿を取り出します。<tt>$wp_query</tt>はリクエスト上の情報を多く保持していて、後からでも利用することができます。
+
<tt>WP_Query</tt>は{{Trac|wp-includes/query.php}}に定義されているクラスで、WordPressブログへの複雑なリクエストを取り扱います。<tt>wp-blog-header.php</tt>(バージョン2.0ではWPクラス)が<tt>$wp_query</tt>オブジェクトに現在のリクエストを定義する情報を与えることで、<tt>$wp_query</tt>は扱うべきはどのタイプのクエリなのか(カテゴリーアーカイブ? 年月別アーカイブ? フィード? 検索?)ということを理解し、要求された投稿を取り出します。<tt>$wp_query</tt>はリクエスト上の情報を多く保持していて、後からでも利用することができます。
  
 
==メソッドとプロパティ==
 
==メソッドとプロパティ==
64行目: 64行目:
 
二つ目は[[The Loop|ループ]]の中です。<tt>WP_Query</tt>はループ内において、よくある要望を実現するための厖大な関数を備えています。たとえば<tt>$wp_query->have_posts()</tt>を呼び出す<tt>have_posts()</tt>は、表示すべき投稿があるかどうかを判断するために呼び出されます。<tt>while</tt>ループの開始時に、<tt>have_posts()</tt>を条件として使います。このループは表示すべき投稿がある限り反復されます。反復処理を行うごとに、<tt>$wp_query->the_post()</tt>を呼び出す<tt>the_post()</tt>が呼び出され、<tt>$wp_query</tt>内の変数とグローバル変数<tt>$post</tt>([[テンプレートタグ]]はこれに依存します)をセットします。これは上で見た通りです。ループを必要とするテーマを作っている時、使うべき関数はたくさんあります。詳しくは[[The Loop|ループ]]と[[The Loop in Action]]/[[:en:The Loop in Action|en]]を見てください。
 
二つ目は[[The Loop|ループ]]の中です。<tt>WP_Query</tt>はループ内において、よくある要望を実現するための厖大な関数を備えています。たとえば<tt>$wp_query->have_posts()</tt>を呼び出す<tt>have_posts()</tt>は、表示すべき投稿があるかどうかを判断するために呼び出されます。<tt>while</tt>ループの開始時に、<tt>have_posts()</tt>を条件として使います。このループは表示すべき投稿がある限り反復されます。反復処理を行うごとに、<tt>$wp_query->the_post()</tt>を呼び出す<tt>the_post()</tt>が呼び出され、<tt>$wp_query</tt>内の変数とグローバル変数<tt>$post</tt>([[テンプレートタグ]]はこれに依存します)をセットします。これは上で見た通りです。ループを必要とするテーマを作っている時、使うべき関数はたくさんあります。詳しくは[[The Loop|ループ]]と[[The Loop in Action]]/[[:en:The Loop in Action|en]]を見てください。
  
{{原文|Function Reference/WP Query|57160}}<!-- 18:35, May 5, 2008 Doug W 版 -->
+
==用例==
 +
 
 +
WP_Query を使用して、指定した配列内のページのみを呼び出す
 +
<pre>
 +
<?php
 +
$args=array(
 +
  'post_type'=>'page',
 +
  'post__in' => array('595', '33', 44)
 +
);
 +
$the_query = new WP_Query($args);
 +
?>
 +
</pre>
 +
 
 +
<b> 注: </b>新規作成された WP_Query() オブジェクトにどんなパラメータを渡すことができるか知るには、[[テンプレートタグ/query_posts|query_posts()]] を参照してください。
 +
 
 +
{{原文|Function Reference/WP Query|84523}}<!-- 15:54, 20 March 2010 Droope 版 -->
  
 
[[Category:関数]]
 
[[Category:関数]]
  
 
[[en:Function Reference/WP_Query]]
 
[[en:Function Reference/WP_Query]]

2010年4月13日 (火) 19:23時点における版

WP_Queryの役割

WP_Querywp-includes/query.phpに定義されているクラスで、WordPressブログへの複雑なリクエストを取り扱います。wp-blog-header.php(バージョン2.0ではWPクラス)が$wp_queryオブジェクトに現在のリクエストを定義する情報を与えることで、$wp_queryは扱うべきはどのタイプのクエリなのか(カテゴリーアーカイブ? 年月別アーカイブ? フィード? 検索?)ということを理解し、要求された投稿を取り出します。$wp_queryはリクエスト上の情報を多く保持していて、後からでも利用することができます。

メソッドとプロパティ

これはWP_Queryの公式な文書です。プロパティを直接書き換えるべきではありません。その代わりにメソッドを使って操作することができます。クラスのメンバとグローバル変数がしっちゃかめっちゃかになることを避ける便利な関数がありますので、WP_Queryに働きかけるを参考にしてください。


プロパティ

$query
wp-blog-header.php(バージョン2.0ではWPクラス)によって$wp_queryオブジェクトに渡されるクエリ文字列。このクエリ文字列の構造については、WordPress Code Flowを見てください(WP1.5のwp-blog-header.phpに関するもの - この情報は古くなっています)。
$query_vars
$query解析されたから成る連想配列:クエリ変数の配列とそれぞれの値。
$queried_object
リクエストがカテゴリー、作者ページ、パーマリンク、ページだった場合に適用される。
$queried_object_id
上記のプロパティのIDを持つ。
$posts
要求された投稿をデータベースから取得したもの。
$post_count
表示される投稿の数。
$current_post
(ループ内でのみ使用可能)表示されようとしている投稿の数。
$post
(ループ内でのみ使用可能) 今表示されている投稿。
$is_single, $is_page, $is_archive, $is_preview, $is_date, $is_year, $is_month, $is_time, $is_author, $is_category, $is_tag, $is_tax, $is_search, $is_feed, $is_comment_feed, $is_trackback, $is_home, $is_404, $is_comments_popup, $is_admin, $is_attachment, $is_singular, $is_robots, $is_posts_page, $is_paged
ブーリアンリクエストがどのタイプなのかを判断する。最初の三つを例に取れば、'これはパーマリンクか?'、'これはページか?'、'これはなんらかのアーカイブページか?'となる。

メソッド

(メソッド名の前にあるアンパサンド(&)はそれが参照渡しであることを示します。)

init()
オブジェクトを初期化して、すべてのプロパティをnull、ゼロ、falseにセットする。
parse_query($query)
リクエストを定義するクエリ文字列を受け取り、それを解析して$posts$post_count$post$current_post以外のすべてのプロパティを返す。
parse_query_vars()
古いクエリ文字列をもう一度解析する。
get($query_var)
指定されたクエリ変数を取得する。
set($query_var, $value)
指定されたクエリ変数を任意の値に設定する。
&get_posts()
要求された投稿をデータベースから取得して返す。$posts$post_countも返す。
next_post()
(ループ内でのみ使用可能)$postsで次の投稿に進む。$current_postを1つ増やし、$postを設定する。
the_post()
(ループ内でのみ使用可能)次の投稿に進み、グローバル変数$postを設定する。
have_posts()
(ループ内か、ループの前でのみ使用可能) 表示する投稿が残っているかを示す。
rewind_posts()
$current_post$postをリセットする。
&query($query)
parse_query()get_posts()を呼び出し、get_posts()の結果を返す。
get_queried_object()
$queried_objectを設定し、それがまだ設定されていなければ、返す。
get_queried_object_id()
$queried_object_idを設定し、それがまだ設定されていなければ返す。
WP_Query($query = '') (コンストラクタ)
クエリ文字列を与えれば、それを使ってquery()を呼び出す。

WP_Queryに働きかける

ほとんどの場合、クラスの内部やグローバル変数を使わなくても欲しい情報は手に入れられるでしょう。どこからでも欲しい情報を手に入れるために、厖大な数の関数があるのですから。

WP_Queryを使いたくなるかもしれないケースが二つあります。一つは、WordPressが今扱っているリクエストがどんなものかを知るためです。$is_*プロパティはこの情報を持つよう設計されています: このためには条件分岐タグを使ってください。これはプラグイン作者(そして、テーマ作者)によくあるケースです。

二つ目はループの中です。WP_Queryはループ内において、よくある要望を実現するための厖大な関数を備えています。たとえば$wp_query->have_posts()を呼び出すhave_posts()は、表示すべき投稿があるかどうかを判断するために呼び出されます。whileループの開始時に、have_posts()を条件として使います。このループは表示すべき投稿がある限り反復されます。反復処理を行うごとに、$wp_query->the_post()を呼び出すthe_post()が呼び出され、$wp_query内の変数とグローバル変数$post(テンプレートタグはこれに依存します)をセットします。これは上で見た通りです。ループを必要とするテーマを作っている時、使うべき関数はたくさんあります。詳しくはループThe Loop in Action/enを見てください。

用例

WP_Query を使用して、指定した配列内のページのみを呼び出す

<?php
$args=array(
   'post_type'=>'page',
   'post__in' => array('595', '33', 44)
);
$the_query = new WP_Query($args);
?>

注: 新規作成された WP_Query() オブジェクトにどんなパラメータを渡すことができるか知るには、query_posts() を参照してください。

最新英語版: WordPress Codex » Function Reference/WP Query最新版との差分