• 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細

このWikiはいつでも誰でも編集できます

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

提供: WordPress Codex 日本語版
移動先: 案内検索
(タイプ&ステータスパラメータ)
(フィルター posts_fields にリンクを貼る。)
 
(5人の利用者による、間の25版が非表示)
1行目: 1行目:
 +
{{NeedTrans|[[#Change_Log|変更履歴]]節以降が}}
 +
__TOC__
  
 +
== 説明<span id="Description"></span> ==
  
==説明==
+
<tt>WP_Query</tt> は {{Trac|wp-includes/class-wp-query.php}} に定義されているクラスで、WordPress ブログへの複雑な投稿やページのリクエストを取り扱います。<tt> {{Trac|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> {{Trac|wp-blog-header.php}}</tt> (バージョン 2.0 では WP クラス) が <tt>$wp_query</tt> オブジェクトに現在のリクエストを定義する情報を与えることで、<tt>$wp_query</tt> はどのタイプのクエリを扱っているのか (カテゴリーアーカイブ、年月別アーカイブ、フィード、検索など) を確定し、要求された投稿を取り出します。<tt>$wp_query</tt> はリクエスト上の情報を多く保持していて、後からでも利用することができます。
+
<div id="Interacting_with_WP_Query">
 +
==WP_Query を使う場面==
 +
</div>
  
==WP_Queryのインタラクション==
+
ほとんどの場合、クラスの内部やグローバル変数を使わなくても欲しい情報は手に入れられるでしょう。どこからでも欲しい情報を手に入れるために、とてもたくさんの関数があるのですから。
  
ほとんどの場合、クラスの内部やグローバル変数を使わなくても欲しい情報は手に入れられるでしょう。どこからでも欲しい情報を手に入れるために、厖大な数の関数があるのですから。
+
<tt>WP_Query</tt> を使いたくなるかもしれないケースが二つあります。一つは WordPress が今扱っているリクエストがどんなものかを知るためです。<tt>$is_*</tt> プロパティはこの情報を持つよう設計されています: これを利用するには[[Conditional Tags|条件分岐タグ]]を使ってください。これはプラグイン作者によくあるケースです(二番目のケースはテーマ作者に)。
  
<tt>WP_Query</tt>を使いたくなるかもしれないケースが二つあります。一つは、WordPressが今扱っているリクエストがどんなものかを知るためです。<tt>$is_*</tt>プロパティはこの情報を持つよう設計されています: このためには[[Conditional Tags|条件分岐タグ]]を使ってください。これはプラグイン作者 (そして、テーマ作者) によくあるケースです。
+
二つ目は[[The Loop|ループ]]の中です。<tt>WP_Query</tt> はループ内においてよくある要望を実現するための数多くの関数を備えています。手始めに、<tt>$wp_query->have_posts()</tt> を呼び出す <tt>[[関数リファレンス/have_posts|have_posts()]]</tt> は、表示すべき投稿があるかどうかを判断するために使います。<tt>while</tt> ループの開始時に <tt>have_posts()</tt> を条件として指定すれば、このループは表示すべき投稿がある限り反復されます。反復処理の中では毎回、<tt>$wp_query->the_post()</tt> を呼び出す <tt>[[関数リファレンス/the_post|the_post()]]</tt> を使います。これは <tt>$wp_query</tt> の内部変数とグローバル変数 <tt>$post</tt>([[テンプレートタグ]]はこれに依存します)を設定します。これは上で見た通りです。ループを必要とするテーマファイルを作る時に使うべき関数はたくさんあります。詳しくは[[The Loop|ループ]]と [[The Loop in Action]] をご覧ください。
  
二つ目は[[The Loop|ループ]]の中です。<tt>WP_Query</tt>はループ内において、よくある要望を実現するための厖大な関数を備えています。たとえば<tt>$wp_query->have_posts()</tt>を呼び出す<tt>[[関数リファレンス/have_posts|have_posts()]]</tt>は、表示すべき投稿があるかどうかを判断するために呼び出されます。<tt>while</tt>ループの開始時に、<tt>have_posts()</tt>を条件として使います。このループは表示すべき投稿がある限り反復されます。反復処理を行うごとに、<tt>$wp_query->the_post()</tt>を呼び出す <tt>[[関数リファレンス/the_post|the_post()]]</tt> が呼び出され、<tt>$wp_query</tt> 内の変数とグローバル変数 <tt>$post</tt> ([[テンプレートタグ]]はこれに依存します) を設定します。これは上で見た通りです。ループを必要とするテーマを作っている時、使うべき関数はたくさんあります。詳しくは[[The Loop|ループ]]と [[The Loop in Action]] をご覧ください。
+
'''参考:''' 自分のクエリで [[関数リファレンス/the_post|the_post()]] を使うのなら、そのクエリの後に [[関数リファレンス/wp_reset_postdata|wp_reset_postdata()]] を実行する必要があります。これは[[テンプレートタグ]]がメインクエリの現在の投稿を再び使えるようにするためです。
  
'''注意:''' あなたのクエリで [[関数リファレンス/the_post|the_post()]] を使うのなら、クエリの後に [[関数リファレンス/wp_reset_postdata|wp_reset_postdata()]] を実行する必要があります。テンプレートタグがメインクエリの現在の記事を再び使えるようにするためです。
+
'''参考:''' [https://core.trac.wordpress.org/ticket/18408 Ticket #18408] 管理画面内で投稿をクエリする場合、[[関数リファレンス/wp_reset_postdata|wp_reset_postdata()]] が期待どおり動かないかもしれないので [[関数リファレンス/get_posts|get_posts()]] を利用するとよいでしょう。
  
'''注意:''' [https://core.trac.wordpress.org/ticket/18408 Ticket #18408] For querying posts in the admin, consider using [[関数リファレンス/get_posts|get_posts()]] as [[関数リファレンス/wp_reset_postdata|wp_reset_postdata()]] might not behave as expected.
+
== 使い方<span id="Usage"></span> ==
  
==用例==
+
=== ふつうのループ<span id="Standard_Loop"></span> ===
+
===標準的なループ===
+
  
 
<pre>
 
<pre>
35行目: 38行目:
 
}
 
}
 
echo '</ul>';
 
echo '</ul>';
 +
/* Restore original Post Data */
 +
wp_reset_postdata();
 
} else {
 
} else {
 
// no posts found
 
// no posts found
 
}
 
}
/* Restore original Post Data */
 
wp_reset_postdata();
 
 
</pre>
 
</pre>
  
===標準的なループ (別の方法)===
+
=== ふつうのループ(別の書き方)<span id="Standard_Loop_.28Alternate.29"></span> ===
  
 
<pre>
 
<pre>
64行目: 67行目:
  
 
<?php else : ?>
 
<?php else : ?>
<p><?php _e( 'Sorry, no posts matched your criteria.' ); ?></p>
+
<p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p>
 
<?php endif; ?>
 
<?php endif; ?>
 
</pre>
 
</pre>
  
===複数のループ===
+
=== 複数のループ<span id="Multiple_Loops"></span> ===
If you have multiple queries, you need to perform multiple loops. Like so...
+
 
 +
クエリが複数あるなら、複数のループを実行する必要があります。このように…
  
 
<pre>
 
<pre>
 
<?php
 
<?php
  
// The Query
+
// クエリ
 
$query1 = new WP_Query( $args );
 
$query1 = new WP_Query( $args );
  
// The Loop
+
if ( $query1->have_posts() ) {
while ( $query1->have_posts() ) {
+
// ループ
$query1->the_post();
+
while ( $query1->have_posts() ) {
echo '<li>' . get_the_title() . '</li>';
+
$query1->the_post();
}
+
echo '<li>' . get_the_title() . '</li>';
 +
}
  
/* Restore original Post Data
+
/* オリジナルの投稿データを復元
* NB: Because we are using new WP_Query we aren't stomping on the
+
* 注意: WP_Query を使っているのでオリジナルの $wp_query を壊すことは
* original $wp_query and it does not need to be reset with
+
* なく、wp_reset_query() によってリセットする必要はありません。
* wp_reset_query(). We just need to set the post data back up with
+
* 投稿データを wp_reset_postdata() で復元することだけが必要です。
* wp_reset_postdata().
+
*/
*/
+
wp_reset_postdata();
wp_reset_postdata();
+
}
  
 
+
/* 2つ目のクエリ (グローバル変数を使わない) */
/* 2つ目のクエリ (without global var) */
+
 
$query2 = new WP_Query( $args2 );
 
$query2 = new WP_Query( $args2 );
  
// 2つ目のループ
+
if ( $query2->have_posts() ) {
while ( $query2->have_posts() ) {
+
// 2つ目のループ
$query2->the_post();
+
while ( $query2->have_posts() ) {
echo '<li>' . get_the_title( $query2->post->ID ) . '</li>';
+
$query2->the_post();
 +
echo '<li>' . get_the_title( $query2->post->ID ) . '</li>';
 +
}
 +
 
 +
// 元の投稿データを復元
 +
wp_reset_postdata();
 
}
 
}
 
// 元の投稿データを復元
 
wp_reset_postdata();
 
  
 
?>
 
?>
 
</pre>
 
</pre>
  
==メソッドとプロパティ==
+
 
 +
== メソッドとプロパティ<span id="Methods_and_Properties"></span> ==
  
 
これは<tt>WP_Query</tt>の公式な文書です。プロパティを直接書き換えるべきではありません。その代わりにメソッドを使って操作することができます。クラスのメンバとグローバル変数がめちゃくちゃになることを避ける便利な関数がありますので、[[#WP_Queryに働きかける|WP_Queryに働きかける]]を参考にしてください。
 
これは<tt>WP_Query</tt>の公式な文書です。プロパティを直接書き換えるべきではありません。その代わりにメソッドを使って操作することができます。クラスのメンバとグローバル変数がめちゃくちゃになることを避ける便利な関数がありますので、[[#WP_Queryに働きかける|WP_Queryに働きかける]]を参考にしてください。
  
===プロパティ===
+
=== プロパティ<span id="Properties"></span> ===
  
 
; <tt>$query</tt>
 
; <tt>$query</tt>
133行目: 140行目:
 
; <tt>$post</tt>
 
; <tt>$post</tt>
 
: ([[The Loop|ループ]]内でのみ使用可能) 現在表示されている投稿。
 
: ([[The Loop|ループ]]内でのみ使用可能) 現在表示されている投稿。
; <tt>$is_single</tt>, <tt>$is_page</tt>, <tt>$is_archive</tt>, <tt>$is_preview</tt>, <tt>$is_date</tt>, <tt>$is_year</tt>, <tt>$is_month</tt>, <tt>$is_time</tt>, <tt>$is_author</tt>,  
+
; <tt>$is_single</tt>, <tt>$is_page</tt>, <tt>$is_archive</tt>, <tt>$is_preview</tt>, <tt>$is_date</tt>, <tt>$is_year</tt>, <tt>$is_month</tt>, <tt>$is_time</tt>, <tt>$is_author</tt>, <tt>$is_category</tt>, <tt>$is_tag</tt>, <tt>$is_tax</tt>, <tt>$is_search</tt>, <tt>$is_feed</tt>, <tt>$is_comment_feed</tt>, <tt>$is_trackback</tt>, <tt>$is_home</tt>, <tt>$is_404</tt>, <tt>$is_comments_popup</tt>, <tt>$is_admin</tt>, <tt>$is_attachment</tt>, <tt>$is_singular</tt>, <tt>$is_robots</tt>, <tt>$is_posts_page</tt>, <tt>$is_paged</tt>
<tt>$is_category</tt>, <tt>$is_tag</tt>, <tt>$is_tax</tt>, <tt>$is_search</tt>, <tt>$is_feed</tt>, <tt>$is_comment_feed</tt>, <tt>$is_trackback</tt>, <tt>$is_home</tt>, <tt>$is_404</tt>, <tt>$is_comments_popup</tt>, <tt>$is_admin</tt>, <tt>$is_attachment</tt>, <tt>$is_singular</tt>, <tt>$is_robots</tt>, <tt>$is_posts_page</tt>, <tt>$is_paged</tt>
+
: リクエストがどのタイプなのかを判断するための[[用語集#Boolean|ブーリアン]]値。最初の3つの例で言えば、「これはパーマリンクか?」「これは固定ページか?」「これは何らかのアーカイブページか?」となる。こちらもお読みください: [[条件分岐タグ]]
: リクエストがどのタイプなのかを判断するための[[用語集#Boolean|ブーリアン]]値。最初の3つの例で言えば、「これはパーマリンクか?」「これは固定ページか?」「これは何らかのアーカイブページか?」となる。合わせて読む: [[Conditional_Tags]]
+
  
===メソッド===
+
=== メソッド<span id="Methods"></span> ===
  
(メソッド名の前にあるアンパサンド(&)はそれが[http://www.php.net/manual/ja/language.references.return.php 参照渡し]であることを示します。)
+
(メソッド名の前にあるアンパサンド「<tt>&amp;</tt>」はそれが[http://www.php.net/manual/ja/language.references.return.php 参照渡し]であることを示します。)
  
 
; <tt>init()</tt>
 
; <tt>init()</tt>
152行目: 158行目:
 
: 指定されたクエリ変数を任意の値に設定する。
 
: 指定されたクエリ変数を任意の値に設定する。
 
; <tt>&get_posts()</tt>
 
; <tt>&get_posts()</tt>
: 要求された投稿をデータベースから取得して返す。<tt>$posts</tt>と<tt>$post_count</tt>も返す。
+
: 要求された投稿をデータベースから取得して返す。さらに <tt>$posts</tt> と <tt>$post_count</tt> に値を入れる。<b>参考:</b> これは WP_Query を引数付きで生成するとき呼び出される。これに冪等性(idempotent)は<em>ない</em>ので、同じクエリオブジェクトについて2回以上呼び出してはいけない。もし行うとクエリが壊れる可能性がある。
 
; <tt>next_post()</tt>
 
; <tt>next_post()</tt>
:  ([[The Loop|ループ]]内でのみ使用可能) <tt>$posts</tt> で次の投稿に進む。<tt>$current_post</tt> を1つ増やし、<tt>$post</tt> を (新規の) 現在の投稿オブジェクトに設定する (注: グローバル <tt>$post</tt> 変数を設定はせず、WP_Query オブジェクトのインスタンス変数のみに適用される) 。現在の投稿オブジェクトを返す。<b>(これは非推奨です。'next_post_link()'を使用ください。 )</b>
+
:  ([[The Loop|ループ]]内でのみ使用可能) <tt>$posts</tt> で次の投稿に進む。<tt>$current_post</tt> を1つ増やし、<tt>$post</tt> を (新規の) 現在の投稿オブジェクトに設定する (注: グローバル <tt>$post</tt> 変数を設定はせず、WP_Query オブジェクトのインスタンス変数のみに適用される) 。現在の投稿オブジェクトを返す。<b>(注意: これは非推奨です。<tt>[[テンプレートタグ/next_post_link|next_post_link()]]</tt> を使ってください。)</b>
 
; <tt>the_post()</tt>
 
; <tt>the_post()</tt>
 
:  ([[The Loop|ループ]]内でのみ使用可能)次の投稿に進み、グローバル変数<tt>$post</tt>を設定する。  
 
:  ([[The Loop|ループ]]内でのみ使用可能)次の投稿に進み、グローバル変数<tt>$post</tt>を設定する。  
 
; <tt>have_posts()</tt>
 
; <tt>have_posts()</tt>
:  ([[The Loop|ループ]]内か、ループの前でのみ使用可能) 表示する投稿が残っているかを示す。Calls <tt>rewind_posts()</tt> and returns false if don't have posts remaining. Because of the rewind, you can't rely on have_posts() staying false. [[関数リファレンス/have_posts#Note|have_posts() note]]をご覧ください。
+
:  ([[The Loop|ループ]]内か、ループの前でのみ使用可能) 表示する投稿が残っているかを示す。残りの投稿がなければ内部で <tt>rewind_posts()</tt> を呼び出してから false を返す。<tt>rewind_posts()</tt> の影響により、have_posts() が連続して false を返すとは限りません。[[関数リファレンス/have_posts#Note|have_posts() の参考セクション]]をご覧ください。
 
; <tt>rewind_posts()</tt>
 
; <tt>rewind_posts()</tt>
 
: <tt>$current_post</tt>と<tt>$post</tt>をリセットする。
 
: <tt>$current_post</tt>と<tt>$post</tt>をリセットする。
171行目: 177行目:
  
  
<div id="Parameters">
+
== パラメータ<span id="Parameters"></span> ==
==パラメータ==
+
</div>
+
  
 
<div id="Author_Parameters">
 
<div id="Author_Parameters">
180行目: 184行目:
 
ある投稿者に関連付けられた投稿を表示する。
 
ある投稿者に関連付けられた投稿を表示する。
  
* '''<tt>author</tt>''' (''int'') - ユーザーID。
+
* '''<tt>author</tt>''' (''整数|文字列'') - ユーザー ID またはそのコンマ区切りリスト。
* '''<tt>author_name</tt>''' (''string'') -  '<tt>user_nicename</tt>' (姓・名・ニックネームではなく)。
+
* '''<tt>author_name</tt>''' (''文字列'') -  '<tt>user_nicename</tt>' (姓・名・ニックネームではなく)。
* '''<tt>author__in</tt>''' (''array'') - ユーザーID ([[Version_3.7|バージョン 3.7]]以降で利用可能)。
+
* '''<tt>author__in</tt>''' (''配列'') - ユーザーID ([[Version_3.7|バージョン 3.7]] 以降で利用可能)。
* '''<tt>author__not_in</tt>''' (''array'') - ユーザーID ([[Version_3.7|バージョン 3.7]]以降で利用可能)。
+
* '''<tt>author__not_in</tt>''' (''配列'') - ユーザーID ([[Version_3.7|バージョン 3.7]] 以降で利用可能)。
 +
 
  
 
'''ひとりの投稿者の投稿を表示する'''
 
'''ひとりの投稿者の投稿を表示する'''
  
ユーザーIDを用いて、ある投稿者の記事を表示する場合:
+
ユーザー ID を用いて、ある投稿者の投稿を表示する場合:
  
 
  $query = new WP_Query( 'author=123' );
 
  $query = new WP_Query( 'author=123' );
  
'<tt>user_nicename</tt>' を用いて、ある投稿者の記事を表示する場合:
+
'<tt>user_nicename</tt>' を用いて、ある投稿者の投稿を表示する場合:
  
 
  $query = new WP_Query( 'author_name=rami' );
 
  $query = new WP_Query( 'author_name=rami' );
197行目: 202行目:
 
'''複数の投稿者の投稿を表示する'''
 
'''複数の投稿者の投稿を表示する'''
  
複数の、特定の投稿者の記事を表示する場合:
+
特定の複数の投稿者の投稿を表示する場合:
  
 
  $query = new WP_Query( 'author=2,6,17,38' );
 
  $query = new WP_Query( 'author=2,6,17,38' );
  
'''ある投稿者による記事を除外する'''
+
'''ある投稿者による投稿を除外する'''
  
'-'(マイナス)記号をユーザーIDの頭につけることで、あるひとりの投稿者(singular) による記事を''除く''、すべての記事を表示できます:
+
'-'(マイナス)記号をユーザー ID の頭につけることで、あるひとり(singular)の投稿者による投稿を''除いて''、すべての記事を表示できます:
 
  $query = new WP_Query( 'author=-12' );
 
  $query = new WP_Query( 'author=-12' );
  
 
'''複数の投稿者を扱う'''
 
'''複数の投稿者を扱う'''
  
複数の投稿者の記事を表示する:
+
複数の投稿者の投稿を表示する:
  
 
  $query = new WP_Query( array( 'author__in' => array( 2, 6 ) ) );
 
  $query = new WP_Query( array( 'author__in' => array( 2, 6 ) ) );
216行目: 221行目:
 
  $query = new WP_Query( array( 'author__not_in' => array( 2, 6 ) ) );
 
  $query = new WP_Query( array( 'author__not_in' => array( 2, 6 ) ) );
  
<div id="Category_Parameters">
 
  
===カテゴリーパラメータ===
+
<div id="Category_Parameters">
 +
===カテゴリーのパラメータ===
 
</div>
 
</div>
 
あるカテゴリーに関連付けられた投稿を表示する。
 
あるカテゴリーに関連付けられた投稿を表示する。
  
* '''<tt>cat</tt>''' (''int'') - カテゴリIDを使用します。
+
* '''<tt>cat</tt>''' (''整数'') - カテゴリー ID を使用します。
* '''<tt>category_name</tt>''' (''string'') - カテゴリのスラッグ(カテゴリ名ではありません)を使用します。
+
* '''<tt>category_name</tt>''' (''文字列'') - カテゴリーのスラッグ(カテゴリ名ではありません)を使用します。
* '''<tt>category__and</tt>''' (''array'') - カテゴリIDを使用します。
+
* '''<tt>category__and</tt>''' (''配列'') - カテゴリー ID を使用します。
* '''<tt>category__in</tt>''' (''array'') - カテゴリIDを使用します。
+
* '''<tt>category__in</tt>''' (''配列'') - カテゴリー ID を使用します。
* '''<tt>category__not_in</tt>''' (''array'') -カテゴリIDを使用します。
+
* '''<tt>category__not_in</tt>''' (''配列'') - カテゴリー ID を使用します。
 +
 
  
'''1つのカテゴリの記事を表示'''
+
'''1つのカテゴリーの記事を表示'''
  
カテゴリIDを使用して、そのカテゴリ(さらにそのカテゴリの子カテゴリ)に属する記事を表示:
+
カテゴリーIDを使用して、そのカテゴリー(さらにそのカテゴリーの子カテゴリー)に属する記事を表示:
  
 
  $query = new WP_Query( 'cat=4' );
 
  $query = new WP_Query( 'cat=4' );
  
カテゴリスラッグを使用して、そのカテゴリ(さらにそのカテゴリの子カテゴリ)に属する記事を表示:
+
カテゴリースラッグを使用して、そのカテゴリー(さらにそのカテゴリーの子カテゴリー)に属する記事を表示:
  
 
  $query = new WP_Query( 'category_name=staff' );
 
  $query = new WP_Query( 'category_name=staff' );
  
カテゴリIDを使って、そのカテゴリ (子カテゴリではない)に属する記事を表示:
+
カテゴリー ID を使って、そのカテゴリー (子カテゴリーではない)に属する記事を表示:
  
 
  $query = new WP_Query( 'category__in=4' );
 
  $query = new WP_Query( 'category__in=4' );
  
'''複数のカテゴリから記事を表示'''
+
'''複数のカテゴリーから記事を表示'''
  
カテゴリIDを使用して、それらのカテゴリに属する記事を表示:
+
カテゴリー ID を使用して、それらのカテゴリーに属する記事を表示:
  
 
  $query = new WP_Query( 'cat=2,6,17,38' );
 
  $query = new WP_Query( 'cat=2,6,17,38' );
  
カテゴリスラッグを使用して、それらのカテゴリに属する記事を表示:
+
カテゴリースラッグを使用して、それらのカテゴリーに属する記事を表示:
  
 
  $query = new WP_Query( 'category_name=staff,news' );
 
  $query = new WP_Query( 'category_name=staff,news' );
  
それらのカテゴリの "全て" に属する記事を表示:
+
それらのカテゴリーの "全て" に属する記事を表示:
  
 
  $query = new WP_Query( 'category_name=staff+news' );
 
  $query = new WP_Query( 'category_name=staff+news' );
  
'''カテゴリに属する記事を除外'''
+
'''カテゴリーに属する記事を除外'''
  
IDに'-'(マイナス記号)が付いたカテゴリの記事を除くすべての記事を表示:
+
ID に '-'(マイナス記号)が付いたカテゴリーの記事を除くすべての記事を表示:
  
 
  $query = new WP_Query( 'cat=-12,-34,-56' );
 
  $query = new WP_Query( 'cat=-12,-34,-56' );
  
'''複数カテゴリの扱い'''
+
'''複数カテゴリーの扱い'''
  
複数のカテゴリに属する記事を表示。下記はカテゴリID 2と6の両方に属する記事を表示します:
+
複数のカテゴリーに属する記事を表示。下記はカテゴリー ID が2と6の両方に属する記事を表示します:
  
 
  $query = new WP_Query( array( 'category__and' => array( 2, 6 ) ) );
 
  $query = new WP_Query( array( 'category__and' => array( 2, 6 ) ) );
  
カテゴリID 2または6の記事を表示するには、前述の cat か、または <tt>category__in</tt>(これらのカテゴリの子カテゴリの記事は表示されないことに注意してください)を使うことで実現します:
+
カテゴリー ID が2または6の記事を表示するには、前述の cat か、または <tt>category__in</tt>(これらのカテゴリーの子カテゴリーの記事は表示されないことに注意してください)を使うことで実現します:
  
 
  $query = new WP_Query( array( 'category__in' => array( 2, 6 ) ) );
 
  $query = new WP_Query( array( 'category__in' => array( 2, 6 ) ) );
  
下記の方法で、複数のカテゴリの記事を除外することもできます:
+
下記の方法で、複数のカテゴリーの記事を除外することもできます:
  
 
  $query = new WP_Query( array( 'category__not_in' => array( 2, 6 ) ) );
 
  $query = new WP_Query( array( 'category__not_in' => array( 2, 6 ) ) );
  
<div id="Tag_Parameters">
 
  
===タグパラメータ===
+
<div id="Tag_Parameters">
 +
===タグのパラメータ===
 
</div>
 
</div>
  
290行目: 296行目:
 
* '''<tt>tag_slug__and</tt>''' (''配列'') - タグのスラッグを指定。
 
* '''<tt>tag_slug__and</tt>''' (''配列'') - タグのスラッグを指定。
 
* '''<tt>tag_slug__in</tt>''' (''配列'') - タグのスラッグを指定。
 
* '''<tt>tag_slug__in</tt>''' (''配列'') - タグのスラッグを指定。
 +
  
 
'''1つのタグの記事を表示'''
 
'''1つのタグの記事を表示'''
327行目: 334行目:
 
<tt>tag_slug__in</tt> と <tt>tag_slug__and</tt> は、タグのスラッグを対象とすることを除いて、それぞれ <tt>tag__in</tt> と <tt>tag__and</tt> とほぼ同様に動作します。
 
<tt>tag_slug__in</tt> と <tt>tag_slug__and</tt> は、タグのスラッグを対象とすることを除いて、それぞれ <tt>tag__in</tt> と <tt>tag__and</tt> とほぼ同様に動作します。
  
<div id="Taxonomy_Parameters">
 
  
===タクソノミーパラメータ===
+
<div id="Taxonomy_Parameters">
 +
===タクソノミーのパラメータ===
 
</div>
 
</div>
  
 
ある[[タクソノミー]]に関連付けられた投稿を表示する。
 
ある[[タクソノミー]]に関連付けられた投稿を表示する。
 
<!-- この引数一覧のみ、[[en:Class Reference/WP Query]] 14:59, 6 May 2015 NateWr 版を反映。 2015/05/13 gblsm -->
 
<!-- この引数一覧のみ、[[en:Class Reference/WP Query]] 14:59, 6 May 2015 NateWr 版を反映。 2015/05/13 gblsm -->
* '''<tt>{tax}</tt>''' (''文字列'') - タクソノミーのスラッグを使用します。'''注:'''バージョン 3.1 以降は'''非推奨'''になりましたので、代わりに 'tax_query' を使用してください。
+
* '''<tt>{tax}</tt>''' (''文字列'') - タクソノミーのスラッグを使用します。'''注:'''バージョン3.1以降は'''非推奨'''になりましたので、代わりに 'tax_query' を使用してください。
* '''<tt>tax_query</tt>''' (''配列'') - タクソノミーパラメータを使用(バージョン 3.1 から利用可能)。
+
* '''<tt>tax_query</tt>''' (''配列'') - タクソノミーパラメータを使用(バージョン3.1から利用可能)。
  
 
+
** '''<tt>relation</tt>''' (''文字列'') - 2つ以上のタクソノミー検索条件(内側の配列)が含まれる場合に、それらの論理的な関係を指定します。有効な値は 'AND' または 'OR' です。1つしかタクソノミー検索条件を含まない場合は指定しないでください。デフォルトは 'AND' です。
** '''<tt>relation</tt>''' (''文字列'') - 2 つ以上のタクソノミー検索条件(内側の配列)が含まれる場合に、それらの論理的な関係を指定します。有効な値は 'AND' または 'OR' です。1 つしかタクソノミー検索条件を含まない場合は指定しないでください。
+
 
** '''<tt>taxonomy</tt>''' (''文字列'') - タクソノミー。
 
** '''<tt>taxonomy</tt>''' (''文字列'') - タクソノミー。
** '''<tt>field</tt>''' (''文字列'') - タクソノミータームの種類を選択します。有効な値は 'term_id'(デフォルト)、'name' または 'slug' です。
+
** '''<tt>field</tt>''' (''文字列'') - タクソノミータームの種類を選択します。有効な値は 'term_id'(デフォルト)、'name''slug' または 'term_taxonomy_id' です。
 
** '''<tt>terms</tt>''' (''整数/文字列/配列'') - タクソノミーターム。
 
** '''<tt>terms</tt>''' (''整数/文字列/配列'') - タクソノミーターム。
 
** '''<tt>include_children</tt>''' (''真偽値'') - 階層を持つタクソノミーの場合に子孫タクソノミーを含めるかどうか。デフォルトは true(含める)です。
 
** '''<tt>include_children</tt>''' (''真偽値'') - 階層を持つタクソノミーの場合に子孫タクソノミーを含めるかどうか。デフォルトは true(含める)です。
** '''<tt>operator</tt>''' (''文字列'') - 演算子。使用可能な値は 'IN'(デフォルト), 'NOT IN', 'AND', 'EXISTS' (4.1.0 以降) と 'NOT EXISTS'(4.1.0 以降) です。
+
** '''<tt>operator</tt>''' (''文字列'') - 演算子。使用可能な値は 'IN'(デフォルト), 'NOT IN', 'AND', 'EXISTS' (4.1.0以降) と 'NOT EXISTS'(4.1.0以降) です。
  
 
'''重要な参考ポイント:''' <tt>tax_query</tt> は、タクソノミー検索条件('''配列''')の'''配列''' をパラメータにします(つまり配列の配列です)。
 
'''重要な参考ポイント:''' <tt>tax_query</tt> は、タクソノミー検索条件('''配列''')の'''配列''' をパラメータにします(つまり配列の配列です)。
下記の 2 番目の例を見るとわかりやすいでしょう。この構造によって、複数のタクソノミーを検索できますが、その時は最初の(外側の)配列の '''<tt>relation</tt>''' パラメータによって複数のタクソノミー検索の関係を指定します。
+
下記の2番目の例を見るとわかりやすいでしょう。この構造によって、複数のタクソノミーを検索できますが、その時は最初の(外側の)配列の '''<tt>relation</tt>''' パラメータによって複数のタクソノミー検索の関係を指定します。
 +
 
  
'''シンプルなカスタム分類のクエリー:'''
+
'''シンプルなカスタム分類のクエリ:'''
  
カスタム分類 '''people'''の'''bob'''に関連付けられた '''投稿'''を表示します :
+
カスタム分類 '''people''' の '''bob''' に関連付けられた投稿('''post''')を表示します :
  
 
<pre>
 
<pre>
391行目: 398行目:
 
</pre>
 
</pre>
  
カテゴリー '''quotes''' に所属するか[[Post Formats|投稿フォーマット]]が'''quote(引用)''''''投稿'''を表示します:
+
カテゴリー '''quotes''' に所属するか[[Post Formats|投稿フォーマット]]が '''quote''' の投稿('''post''')を表示します:
  
 
<pre>
 
<pre>
413行目: 420行目:
 
</pre>
 
</pre>
  
'''ネストされたカスタム分類の取扱い:'''
+
'''カスタム分類の取扱いを入れ子で指定:'''
  
[[Version_4.1|4.1]]以降から、より複雑なクエリを作成のために、<tt>'tax_query'</tt> 句を入れ子にすることができます。  
+
[[Version_4.1|バージョン 4.1]] 以降、より複雑なクエリを作成するために <tt>'tax_query'</tt> 句を入れ子にすることができます。
  
例: カテゴリー '''quotes''' に所属する、もしくは投稿フォーマットが '''quote(引用)''' かつカテゴリー '''wisdom''' に所属する投稿を表示:
+
例: カテゴリー '''quotes''' に所属する、もしくは投稿フォーマットが '''quote''' かつカテゴリー '''wisdom''' に所属する投稿を表示:
  
 
<pre>
 
<pre>
447行目: 454行目:
 
</pre>
 
</pre>
  
<div id="Post_.26_Page_Parameters">
 
  
===投稿&固定ページパラメータ===
+
<div id="Search_Parameter">
 +
===検索パラメータ===
 
</div>
 
</div>
  
投稿および固定ページに基づいてコンテンツを表示する。
+
キーワード検索によって投稿を表示します。
  
* '''<tt>p</tt>''' (''int'') - 投稿のIDを使用する。
+
* '''<tt>s</tt>''' (''文字列'') - 検索するキーワード。
* '''<tt>name</tt>''' (''string'') - 投稿のスラッグを使用する。
+
* '''<tt>page_id</tt>''' (''int'') - 固定ページのIDを使用する。
+
* '''<tt>pagename</tt>''' (''string'') - 固定ページのスラッグを使用する。
+
* '''<tt>post_parent</tt>''' (''int'') - 固定ページのIDを使用する。子ページを返す。
+
* '''<tt>post__in</tt>''' (''array'') - 投稿のIDを使用する。取得するために投稿を指定する。
+
* '''<tt>post__not_in</tt>''' (''array'') - 投稿のIDを使用する。指定された投稿は'''取得されない'''。
+
  
 +
 +
'''キーワード検索によって投稿を表示'''
 +
 +
「キーワード」という検索語にマッチする投稿を表示します:
 +
 +
$query = new WP_Query( array( 's' => 'キーワード' ) );
 +
 +
ハイフンを前置した言葉を与えると、その言葉にマッチした投稿を除外します。例えば 'pillow -sofa' は 'pillow' を含むが 'sofa' を含まない投稿を返します([[Version 4.4|バージョン4.4]]以降)。
 +
 +
 +
<div id="Post_.26_Page_Parameters">
 +
===投稿と固定ページのパラメータ===
 +
</div>
 +
 +
投稿および固定ページに基づいてコンテンツを表示する。
 +
 +
* '''<tt>p</tt>''' (''整数'') - 投稿の ID を使用する。デフォルトの投稿タイプは <code>post</code> です。
 +
* '''<tt>name</tt>''' (''文字列'') - 投稿のスラッグを使用する。
 +
* '''<tt>title</tt>''' (''文字列'') - 投稿のタイトルを使用する。([[Version 4.4|バージョン4.4]]以降)
 +
* '''<tt>page_id</tt>''' (''整数'') - 固定ページの ID を使用する。
 +
* '''<tt>pagename</tt>''' (''文字列'') - 固定ページのスラッグを使用する。
 +
* '''<tt>post_parent</tt>''' (''整数'') - 固定ページの ID を使用する。子ページを返す。
 +
* '''<tt>post_parent__in</tt>''' (''配列'') - 投稿の ID を使用する。親の ID が配列内にある投稿を返す。([[Version 3.6|バージョン3.6]]以降)
 +
* '''<tt>post_parent__not_in</tt>''' (''配列'') - 投稿の ID を使用する。親の ID が配列内にない投稿を返す。([[Version 3.6|バージョン3.6]]以降)
 +
* '''<tt>post__in</tt>''' (''配列'') - 投稿の ID を使用する。取得するために投稿を指定する。'''注意:''' 先頭固定表示の投稿がある場合、欲しいかどうかに関係なくその投稿も取得されます(先頭に!)。この動作を避けるには [[#Pagination_Parameters|ignore_sticky_posts]] を使ってください。
 +
* '''<tt>post__not_in</tt>''' (''配列'') - 投稿の ID を使用する。指定された投稿は'''取得されない'''。同じクエリで <code>post__in</code> と共に使うと、これは無視される。
 +
* '''<tt>post_name__in</tt>''' (''配列'') - 投稿のスラッグを使う。([[Version 4.4|バージョン4.4]]以降)
 +
 +
'''参考:''' [https://core.trac.wordpress.org/ticket/28099 Ticket #28099] <tt>post__in</tt> に空の配列を渡すと、<tt>has_posts()</tt> が true になります(すべての投稿が返されます)。<tt>post__in</tt> へ渡す配列が空のとき <tt>WP_Query</tt> を使う必要があるかどうかの判定処理を導入すると良いでしょう。
 +
 
'''IDで投稿/ページを表示'''
 
'''IDで投稿/ページを表示'''
  
 
投稿のIDを指定して表示する:
 
投稿のIDを指定して表示する:
  
  $query = new WP_Query( 'p=7' );
+
  $query = new WP_Query( array( 'p' => 7 ) );
 +
// 固定ページなら: 'page_id'=>7
  
固定ページのIDを指定して表示する:
+
'''参考:''' ID = 0 でも結果が返されるので注意しましょう。
 
+
$query = new WP_Query( 'page_id=7' );
+
  
 
'''スラッグで投稿/ページを表示'''
 
'''スラッグで投稿/ページを表示'''
477行目: 507行目:
  
 
  $query = new WP_Query( 'name=about-my-life' );
 
  $query = new WP_Query( 'name=about-my-life' );
 +
// 固定ページなら: 'pagename'=>'about-my-life'
  
固定ページのスラッグを指定して表示する:
+
'''子投稿/子ページを表示'''
  
$query = new WP_Query( 'pagename=contact' );
+
スラッシュで区切られた親ページと子ページのスラッグを使って子ページを表示する(例: 'parent_slug/child_slug'):
  
'''子投稿/子ページを表示'''
+
$query = new WP_Query( 'pagename=contact_us/canada' );
  
Display child page using the slug of the parent and the child page, separated by a slash (e.g. 'parent_slug/child_slug'):
+
親ページの ID を使って子ページを表示する:
  
 +
$query = new WP_Query( array( 'post_parent' => 93 ) );
  
  $query = new WP_Query( 'pagename=contact_us/canada' );
+
子ページは除外し、トップレベルのページのみ表示する:
 +
 
 +
  $query = new WP_Query( array( 'post_parent' => 0 ) );
  
親ページのIDを使って子ページを表示:
+
配列中の ID で示されたページを親に持つ投稿を表示する:
  
  $query = new WP_Query( 'post_parent=93' );
+
  $query = new WP_Query( array( 'post_parent__in' => array( 2, 5, 12, 14, 20 ) ) );
  
 
'''複数の投稿/ページを操作'''
 
'''複数の投稿/ページを操作'''
503行目: 537行目:
 
  $query = new WP_Query( array( 'post__not_in' => array( 2, 5, 12, 14, 20 ) ) );
 
  $query = new WP_Query( array( 'post__not_in' => array( 2, 5, 12, 14, 20 ) ) );
  
注意: 同じクエリー内で 'post__in' 'post__not_in' 同時に使うことは出来ません。
+
注意: 同じクエリ内で <tt>'post__in'</tt> と <tt>'post__not_in'</tt> を同時に使うことは出来ません。
 +
 
 +
またこのとき、コンマで区切られたリストを含む文字列では正常に動かないことにも注意してください。
 +
 +
'post__not_in' => array( '1,2,3' )  // <--- これは動きません
  
<div id="Type_.26_Status_Parameters">
 
  
===タイプ&ステータスパラメータ===
+
<div id="Password_Parameters">
 +
===パスワードのパラメータ===
 
</div>
 
</div>
  
ある[[投稿タイプ]]または[[Post Status|投稿ステータス]]に関連付けられた投稿を表示する。
+
パスワードのパラメータを指定した場合、投稿と固定ページのパラメータで選ばれた投稿や固定ページが対象になります。<!-- Show content based on post and page parameters. -->デフォルトの <tt>post_type</tt> は投稿であり固定ページではないことを覚えておきましょう。
  
* '''<tt>post_type</tt>''' (''string'' / ''array'') - 投稿を[[投稿タイプ]によって取得する。デフォルト値は '<tt>post</tt>'。'<tt>tax_query</tt>' がクエリーにセットされている場合、デフォルト値は '<tt>any</tt>' になります。
+
* '''<tt>has_password</tt>''' (''真偽値'') -  パスワードで保護された投稿を表示するには true、保護されてない投稿を表示するには false を指定します。またパスワードの有無に関わらず表示したい場合は null を指定します(デフォルト)。([[Version 3.9|バージョン 3.9]] から使用可能)
 +
* '''<tt>post_password</tt>''' (''文字列'') - 特定のパスワードで保護されている投稿を表示します。([[Version 3.9|バージョン 3.9]] から使用可能)
 +
 
 +
 
 +
'''パスワード保護の有無に応じて表示する'''
 +
 
 +
パスワード保護された投稿のみ表示する:
 +
 
 +
$query = new WP_Query( array( 'has_password' => true ) );
 +
 
 +
パスワード保護されていない投稿のみ表示する:
 +
 
 +
$query = new WP_Query( array( 'has_password' => false ) );
 +
 
 +
パスワード保護の有無に関わらず投稿を表示する:
 +
 
 +
$query = new WP_Query( array( 'has_password' => null ) );
 +
 
 +
'''特定のパスワードで保護されている記事を表示'''
 +
 
 +
'zxcvbn' というパスワードを持つ投稿を表示する:
 +
 
 +
$query = new WP_Query( array( 'post_password' => 'zxcvbn' ) );
 +
 
 +
 
 +
<div id="Type_Parameters">
 +
===投稿タイプのパラメータ===
 +
</div>
 +
 
 +
ある[[投稿タイプ]]に関連付けられた投稿を表示します。
 +
 
 +
* '''<tt>post_type</tt>''' (''文字列'' / ''配列'') - 投稿を[[投稿タイプ]によって取得する。デフォルト値は '<tt>post</tt>'。'<tt>tax_query</tt>' がクエリーにセットされている場合、デフォルト値は '<tt>any</tt>' になります。
 
** '<tt>post</tt>' - 投稿。
 
** '<tt>post</tt>' - 投稿。
 
** '<tt>page</tt>' - 固定ページ。
 
** '<tt>page</tt>' - 固定ページ。
 
** '<tt>revision</tt>' - 履歴 (リビジョン) 。
 
** '<tt>revision</tt>' - 履歴 (リビジョン) 。
** '<tt>attachment</tt>' - 添付ファイル。 WP_Queryのデフォルトは、'post_status'=>'published' ですが、添付ファイルの場合デフォルトは'post_status'=>'inherit'です。投稿ステータスは 'inherit' か 'any' である必要があります。
+
** '<tt>attachment</tt>' - 添付ファイル。WP_Query のデフォルトでは 'post_status' 'published' ですが、添付ファイルはデフォルトで 'post_status' 'inherit' になっています。そのため 'post_status' を明示的に 'inherit' か 'any' にしなければ、どの添付ファイルも取得できません。(後に出てくる [[#Status_Parameters|ステータスのパラメータ]] を見てください)
** '<tt>any</tt>' - リビジョンと'exclude_from_search'がtrueにセットされたものを除き、すべてのタイプを含める
+
** '<tt>nav_menu_item</tt>' - ナビゲーションメニュー項目。
** Custom Post Types (e.g. movies)
+
** '<tt>any</tt>' - リビジョンと 'exclude_from_search' が true にセットされたものを除き、すべてのタイプを含める。
* '''<tt>post_status</tt>''' (''string'' / ''array'') - 投稿ステータス[[Post Status]]を指定します。 デフォルト値は'<tt>publish</tt>'。
+
** カスタム投稿タイプ (例えば movies)
** '<tt>publish</tt>' - 公開された投稿もしくは固定ページ
+
** '<tt>pending</tt>' - レビュー待ちの投稿
+
** '<tt>draft</tt>' - 下書きの投稿
+
** '<tt>auto-draft</tt>' - コンテンツのない、新規作成された投稿
+
** '<tt>future</tt>' - 予約公開設定された投稿
+
** '<tt>private</tt>' - ログインしていないユーザーから見えない設定
+
** '<tt>inherit</tt>' - リビジョン。 [[関数リファレンス/get_children|get_children]]を参照下さい。
+
** '<tt>trash</tt>' - ゴミ箱に入った投稿。 ([[Version 2.9]]で利用可能).
+
** '<tt>any</tt>' - 投稿タイプで’exclude_from_search’がtrueにセットされているものを除き、すべてのステータスの投稿を取得する。
+
  
'''Show Post by Type'''
+
 
 +
'''投稿タイプによる投稿の表示'''
  
 
固定ページのみ表示:
 
固定ページのみ表示:
  
  $query = new WP_Query( 'post_type=page' );
+
  $query = new WP_Query( array( 'post_type' => 'page' ) );
  
'<tt>全ての</tt>' 投稿タイプを表示(リビジョンと'exclude_from_search' が TRUEになっている投稿タイプ以外が含まれます):
+
'<tt>any</tt>'(すべての)投稿タイプを表示(リビジョンと 'exclude_from_search' が TRUE になっている投稿タイプを除くすべての投稿タイプが含まれます):
  
  $query = new WP_Query( 'post_type=any' );
+
  $query = new WP_Query( array( 'post_type' => 'any' ) );
  
 
カスタムポストタイプを含む複数のポストタイプを表示:
 
カスタムポストタイプを含む複数のポストタイプを表示:
  
$query = new WP_Query( array( 'post_type' => array( 'post', 'page', 'movie', 'book' ) ) );
+
<pre>
 +
$args = array(
 +
'post_type' => array( 'post', 'page', 'movie', 'book' )
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
 +
 
 +
 
 +
<div id="Status_Parameters">
 +
===ステータスのパラメータ===
 +
</div>
 +
 
 +
ある[[Post Status|投稿ステータス]]に関連付けられた投稿を表示します。
 +
 
 +
* '''<tt>post_status</tt>''' (''文字列'' / ''配列'') - [[Post Status|投稿ステータス]]を指定します。 デフォルト値は '<tt>publish</tt>' です。しかしユーザーがログイン中なら、'<tt>private</tt>' が追加されます。公開された (Public) [[投稿ステータス#Custom_Status|カスタムステータス]]もデフォルトで含まれます。さらに管理画面のコンテキストでクエリが動作中なら(管理画面または AJAX 呼び出し)、保護状態のステータスも追加されます。デフォルトでは保護状態のステータスは '<tt>future</tt>', '<tt>draft</tt>' と '<tt>pending</tt>' です。
 +
** '<tt>publish</tt>' - 公開された投稿もしくは固定ページ
 +
** '<tt>pending</tt>' - レビュー待ちの投稿
 +
** '<tt>draft</tt>' - 下書きの投稿
 +
** '<tt>auto-draft</tt>' - コンテンツのない、新規作成された投稿
 +
** '<tt>future</tt>' - 予約公開設定された投稿
 +
** '<tt>private</tt>' - ログインしていないユーザーから見えない設定
 +
** '<tt>inherit</tt>' - リビジョン。 [[関数リファレンス/get_children|get_children]]を見てください。
 +
** '<tt>trash</tt>' - ゴミ箱に入った投稿。 ([[Version 2.9]] 以降で利用可能)。
 +
** '<tt>any</tt>' - 'exclude_from_search' が true にセットされているもの(つまり trash と auto-draft)を除き、すべてのステータスの投稿を取得する。
  
 
'''ステータスによる投稿の表示'''
 
'''ステータスによる投稿の表示'''
548行目: 632行目:
 
下書きのみ表示:
 
下書きのみ表示:
  
  $query = new WP_Query( 'post_status=draft' );
+
  $query = new WP_Query( array( 'post_status' => 'draft' ) );
  
 
複数の投稿のステータスを表示:
 
複数の投稿のステータスを表示:
  
$query = new WP_Query( array( 'post_status' => array( 'pending', 'draft', 'future' ) ) );
+
<pre>
 +
$args = array(
 +
'post_status' => array( 'pending', 'draft', 'future' )
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
 
すべての添付ファイルを表示:
 
すべての添付ファイルを表示:
  
$query = new WP_Query( array( 'post_status' => 'any', 'post_type' => 'attachment' ) );
+
<pre>
 +
$args = array(
 +
'post_status' => 'any',
 +
'post_type'   => 'attachment'
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
<div id="Pagination_Parameters">
+
=== コメントパラメータ<span id="Comment_Parameters"></span> ===
  
===ページ送りパラメータ===
+
[[Version 4.9|バージョン4.9]]以降、<tt>comment_count</tt> パラメータを導入しました。
</div>
+
  
* '''<tt>showposts</tt>''' (''int'') - ページごとに表示する投稿数。[[Version 2.1]]で'''非推奨'''となり、後継は 'posts_per_page'です。
+
* '''<tt>comment_count</tt>''' (''整数'') - 投稿のコメント数(比較演算子は <tt>'='</tt> が使われる)
* '''<tt>posts_per_page</tt>''' (''int'') - ページごとに表示する投稿数([[Version 2.1]]より使用可能)。 <tt>'posts_per_page'=>-1</tt> を利用すると全件取得します。 Note if the query is in a feed, wordpress overwrites this parameter with the stored 'posts_per_rss' option. To reimpose the limit, try using the 'post_limits' filter, or filter 'pre_option_posts_per_rss' and return -1
+
* '''<tt>comment_count</tt>''' (''配列'') -  
* '''<tt>posts_per_archive_page</tt>''' (''int'') - ページごとに表示する投稿数 - アーカイブページでのみ。 Over-rides <tt>showposts</tt> and <tt>posts_per_page</tt> on pages where <tt>[[関数リファレンス/is_archive|is_archive()]]</tt> or <tt>[[関数リファレンス/is_search|is_search()]]</tt> would be true
+
** '''<tt>value</tt>''' (''整数'') - 投稿のコメント数と比較する数。
* '''<tt>nopaging</tt>''' (''真または偽'') - すべての投稿や使用ページ区切りを示します。 デフォルト値は 'false'、ページ送りに使用します。
+
** '''<tt>compare</tt>''' (''文字列'') - 比較演算子。可能な値は <tt>'=', '!=', '>', '>=', '<', '<='</tt> です。デフォルトは <tt>'='</tt> です。
* '''<tt>paged</tt>''' (''int'') - ページ数。 Show the posts that would normally show up just on page X when using the "Older Entries" link.
+
  
'''ページあたり x件の投稿を表示'''
+
'''簡単なコメント数のクエリ:'''
 +
 
 +
コメント数が'''20'''の'''投稿'''を表示する:
 +
 
 +
<pre>
 +
$args = array(
 +
'post_type' => 'post',
 +
'comment_count' => 20,
 +
)
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
 +
 
 +
 
 +
'''高度なコメント数のクエリ:'''
 +
 
 +
コメント数が'''25'''以上の'''投稿'''を表示する:
 +
 
 +
<pre>
 +
$args = array(
 +
'post_type' => 'post',
 +
'comment_count' => array(
 +
array(
 +
'value' => 25,
 +
'compare' => '>=',
 +
),
 +
)
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
ページあたり3件の投稿を表示する:
+
=== ページ送りパラメータ<span id="Pagination_Parameters"></span> ===
  
$query = new WP_Query( 'posts_per_page=3' );
+
* '''<tt>nopaging</tt>''' (''真偽値'') - すべての投稿を含めるか、ページ送りに対応させます。デフォルト値は <tt>false</tt> で、ページ送りに対応します。
 +
* '''<tt>posts_per_page</tt>''' (''整数'') - 1ページに含める投稿数([[Version 2.1|バージョン 2.1]] 以降で使えます。非推奨になった '''<tt>showposts</tt>''' パラメータを置き換えます)。<tt>'posts_per_page'=>-1</tt> を使用するとすべての投稿を含めます(このとき '<tt>offset</tt>' パラメータは無視されます)。ページ送りを使用するにはこのパラメータと一緒に [[#set-paged|'<tt>paged</tt>' パラメータを指定]]してください。'''参考''':フィードでのクエリの場合、WordPress はオプション '<tt>posts_per_rss</tt>'(RSS/Atom フィードで表示する最新の投稿数)の値でこのパラメータを上書きします。それでも投稿数を設定するには 'post_limits' フィルターを使うか、'pre_option_posts_per_rss' フィルターで -1 を返してください。
 +
* '''<tt>posts_per_archive_page</tt>''' (''整数'') - 1ページに含める投稿数ですが、アーカイブページ専用です。<tt>[[関数リファレンス/is_archive|is_archive()]]</tt> か <tt>[[関数リファレンス/is_search|is_search()]]</tt> が true になるページでは、<tt>posts_per_page</tt> と <tt>showposts</tt> の値を上書きします。
 +
* '''<tt>offset</tt>''' (''整数'') - ''ずらす''(または読み飛ばす)投稿の数。''注意'':<tt>offset</tt> パラメータをセットすると <tt>paged</tt> パラメータを無視します。そのためページ送りされません([[Making_Custom_Queries_using_Offset_and_Pagination|ワークアラウンドを見るにはここをクリック]] /[[:en:Making_Custom_Queries_using_Offset_and_Pagination|en]])。反対に <tt>'offset'</tt> パラメータは <tt>'posts_per_page'=>-1</tt> が使われると(すべての投稿を表示)無視されます。
 +
* '''<tt>paged</tt>''' (''整数'') - ページ番号。「前の投稿」リンクを使った場合にふつうページ X に表示されるであろう投稿を含めます。
 +
* '''<tt>page</tt>''' (''整数'') - [[Creating_a_Static_Front_Page|静的フロントページ]]用のページ番号。静的フロントページのページ X に表示されるであろう投稿を表示します。
 +
* '''<tt>ignore_sticky_posts</tt>''' (''真偽値'') - 先頭固定表示の投稿を無視します([[Version 3.1|バージョン 3.1]] 以降で使えます。非推奨になった '''<tt>caller_get_posts</tt>''' パラメータを置き換えます)。デフォルトは <tt>false</tt> で、無視しません(先頭に含めます)。<tt>true</tt> にすると無視します。なお、先頭固定表示の投稿を無視(除外)しても先頭に出てこないだけで、投稿リストにそれらの投稿が本来並ぶべき位置には出てきます。
  
'''全ての投稿を表示'''
+
'''ページあたり x 件の投稿を表示'''
  
1つのページに全ての投稿を表示する:
+
$query = new WP_Query( array( 'posts_per_page' => 3 ) ); // ページあたり3件の投稿を表示
  
  $query = new WP_Query( 'posts_per_page=-1' );
+
  $query = new WP_Query( array( 'posts_per_page' => -1 ) ); // 1つのページに全ての投稿を表示
  
 
ページネーションを無効にして全ての投稿を表示する:
 
ページネーションを無効にして全ての投稿を表示する:
  
  $query = new WP_Query( 'nopaging=true' );
+
  $query = new WP_Query( array( 'nopaging' => true ) );
  
'''xページから投稿を表示'''
+
'''投稿を読み飛ばす'''
  
ページ番号6の記事を表示します:
+
4番目の投稿から表示する:
 +
 
 +
$query = new WP_Query( array( 'offset' => 3 ) );
 +
 
 +
最新から3つを飛ばして5件の投稿を表示:
 +
 
 +
$query = new WP_Query( array( 'posts_per_page' => 5, 'offset' => 3 ) );
 +
 
 +
'''xページから投稿を表示'''
  
  $query = new WP_Query( 'paged=6' );
+
  $query = new WP_Query( array( 'paged' => 6 ) ); // ページ番号6の記事を表示
  
 
'''現在のページから投稿を表示'''
 
'''現在のページから投稿を表示'''
  
現在のページから投稿を表示する:
+
$query = new WP_Query( array( 'paged' => get_query_var( 'paged' ) ) );
  
$query = new WP_Query( 'paged=' . get_query_var( 'page' ) );
+
<span id="set-paged">現在のページから投稿を表示するが、もしクエリ変数がセットされていなければ(先頭ページなら)'page' パラメータに 1 をセットする。</span>
  
ページネーションの注意: You should set <tt>get_query_var( 'page' );</tt> if you want your query to work with pagination. Since [[Version 3.0.2|Wordpress 3.0.2]], you do <tt>get_query_var( 'page' )</tt> instead of <tt>get_query_var( 'paged' )</tt>. The pagination parameter '<tt>paged</tt>' for <tt>WP_Query()</tt> remains the same.
+
$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
 +
$query = new WP_Query( array( 'paged' => $paged ) );
  
<div id="Offset_Parameters">
+
ページネーションの参考:[[Creating_a_Static_Front_Page|静的フロントページ]]に指定した[[Pages#Page_Templates|ページテンプレート]]において、クエリをページ送りに対応させるには <tt>get_query_var( 'page' );</tt> を使ってください。さらにクエリ変数 'page' は、<code>&lt;!--nextpage--&gt;</code> [[Write_Post_SubPanel#Quicktags|クイックタグ]] をコンテンツに含んでおりページ分割された単一の投稿または固定ページについて、ページ番号を保持します。
  
===オフセットパラメータ===
+
[[Creating_a_Static_Front_Page|静的フロントページ]]の現在のページから投稿を表示する:
</div>
+
  
* '''<tt>offset</tt>''' (''int'') - number of post to ''displace'' or pass over.
+
$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
 +
$query = new WP_Query( array( 'paged' => $paged ) );
  
'''3投稿をとばす'''
+
'''先頭固定表示の投稿を含める'''
  
4番目の投稿から表示する:
+
先頭固定表示の投稿のうち最初のひとつを取得します:
  
  $query = new WP_Query( 'offset=3' ) );
+
$sticky = get_option( 'sticky_posts' );
 +
  $query = new WP_Query( array( 'p' => $sticky[0] ) );
  
'''Show 5 Posts starting from the second one'''
+
最初の先頭固定表示の投稿を取得しますが、もしなければ最新の投稿を取得します:
  
Display 5 posts per page which follow the most recent (1):
+
<pre>
 +
$sticky = get_option( 'sticky_posts' );
 +
$args = array(
 +
'posts_per_page'      => 1,
 +
'post__in'            => $sticky,
 +
'ignore_sticky_posts' => 1,
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
$query = new WP_Query( array( 'posts_per_page' => 5, 'offset' => 1 ) );
+
最初の先頭固定表示の投稿を取得する(最新の投稿を除く)には、次のコードを上記のコードに続けてください:
  
'''注:''' オフセットパラメータを設定すると、ページングのパラメータを無視します。
+
<pre>
 +
if ( $sticky[0] ) {
 +
// insert here your stuff...
 +
}
 +
</pre>
  
<div id="Order_.26_Orderby_Parameters">
+
'''先頭固定表示の投稿を無視する'''
  
===順序&順序ベースパラメータ===
+
クエリからすべての先頭固定表示の投稿を除外します:
</div>
+
  
投稿の並びを指定する。
+
$query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );
  
* '''<tt>order</tt>''' (''string'') - Designates the ascending or descending order of the '<tt>orderby</tt>' parameter.  デフォルトは降順 'DESC'です。
+
カテゴリー内の'''すべての'''投稿を取得しますが、先頭固定表示の投稿を先頭に入れません(''ignore'')。ただし本来出てくるべき位置(例:日付順)には先頭固定表示の投稿が含まれます:
** '<tt>ASC</tt>' - 最低から最高に昇順 (1, 2, 3; a, b, c).
+
** '<tt>DESC</tt>' - 最高から最低に降順  (3, 2, 1; c, b, a).
+
  
* '''<tt>orderby</tt>''' (''string'') - パラメーターによって投稿をソートする。デフォルト値は 'date'です。
+
$query = new WP_Query( array( 'ignore_sticky_posts' => 1, 'posts_per_page' => 3, 'cat' => 6 );
** '<tt>none</tt>' - No order ([[Version 2.8]]で使用可能)
+
 
** '<tt>ID</tt>' - 投稿IDで並び替える。大文字に注意。
+
あるカテゴリーから先頭固定表示の投稿を無視して取得します。カテゴリー内の投稿を取得しますが、先頭固定表示の投稿を完全に除外します。さらにページングに対応させます:
** '<tt>author</tt>' - 著者で並び替える。
+
 
** '<tt>title</tt>' - タイトルで並び替える。
+
<pre>
** '<tt>date</tt>' - 日付で並び替える。
+
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
** '<tt>modified</tt>' - 更新日で並び替える。
+
$sticky = get_option( 'sticky_posts' );
** '<tt>parent</tt>' - 投稿/固定ページの親ID順。
+
$args = array(
** '<tt>rand</tt>' - ランダムで並び替える。
+
'cat'                => 3,
** '<tt>comment_count</tt>' - コメント数で並び替える ([[Version 2.9]]で使用可能)
+
'ignore_sticky_posts' => 1,
** '<tt>menu_order</tt>' - ページの表示順で並び替える。 [[固定ページ]]で最も使用される (''Order'' field in the Edit Page Attributes box) and for [[Attachments]] (the integer fields in the Insert / Upload Media Gallery dialog), but could be used for any post type with distinct '<tt>menu_order</tt>' values (they all default to <var>0</var>).
+
'post__not_in'        => $sticky,
** '<tt>meta_value</tt>' - Note that a '<tt>meta_key=keyname</tt>' must also be present in the query. Note also that the sorting will be alphabetical which is fine for strings (i.e. words), but can be unexpected for numbers (e.g. 1, 3, 34, 4, 56, 6, etc, rather than 1, 3, 4, 6, 34, 56 as you might naturally expect).
+
'paged'              => $paged,
** '<tt>meta_value_num</tt>' - 数値として並び替える。 ([[Version 2.8]]で使用可能。). Also note that a '<tt>meta_key=keyname</tt>' must also be present in the query. This value allows for numerical sorting as noted above in '<tt>meta_value</tt>'.
+
);
 +
$query = new WP_Query( $args );
 +
</pre>
 +
 
 +
 
 +
=== 順序づけパラメータ<span id="Order_.26_Orderby_Parameters"></span> ===
 +
 
 +
投稿の並びを指定します。
 +
 
 +
* '''<tt>order</tt>''' (''文字列 | 配列'') - '<tt>orderby</tt>' パラメータについて昇順か降順かを指定します。デフォルトは 'DESC'(降順)です。複数の order/orderby の組を配列で指定することもできます。
 +
** '<tt>ASC</tt>' - 最低から最高へ昇順 (1, 2, 3; a, b, c).
 +
** '<tt>DESC</tt>' - 最高から最低へ降順  (3, 2, 1; c, b, a).
 +
 
 +
* '''<tt>orderby</tt>''' (''文字列 | 配列'') - パラメータで指定した項目の値で投稿をソートする。デフォルトは 'date' (post_date) です。2つ以上のオプションを含めることもできます。
 +
** '<tt>none</tt>' - 順序をつけない([[Version 2.8|バージョン 2.8]] 以降で使用可能)。
 +
** '<tt>ID</tt>' - 投稿 ID で並び替える。大文字に注意。
 +
** '<tt>author</tt>' - 著者で並び替える。('<tt>post_author</tt>' でも良い。)
 +
** '<tt>title</tt>' - タイトルで並び替える。('<tt>post_title</tt>' でも良い。)
 +
** '<tt>name</tt>' - スラッグで並び替える。('<tt>post_name</tt>' でも良い。)
 +
** '<tt>type</tt>' - 投稿タイプで並び替える。('<tt>post_type</tt>' でも良い。)
 +
** '<tt>date</tt>' - 日付で並び替える。('<tt>post_date</tt>' でも良い。)
 +
** '<tt>modified</tt>' - 更新日で並び替える。('<tt>post_modified</tt>' でも良い。)
 +
** '<tt>parent</tt>' - 投稿/固定ページの親 ID 順。('<tt>post_parent</tt>' でも良い。)
 +
** '<tt>rand</tt>' - ランダムで並び替える。'<tt>RAND(x)</tt>' も使えます('<tt>x</tt>' はシードになる整数)。
 +
** '<tt>comment_count</tt>' - コメント数で並び替える([[Version 2.9|バージョン 2.9]] 以降で使用可能)。
 +
** '<tt>relevance</tt>' - 文字列検索のとき次の順で並び替える: 1. 文字列全体がマッチ。 2. すべての単語がタイトルに含まれる。 3. いずれかの単語がタイトルに現れる。 4. 文字列全体が post_content に現れる。
 +
** '<tt>menu_order</tt>' - 固定ページの表示順で並び替える。[[固定ページ]](固定ページ編集画面の''ページ属性''ボックス)と[[Attachments|添付ファイル]](ギャラリー内のメディアの順番に相当<!-- the integer fields in the Insert / Upload Media Gallery dialog -->)で使うことが最も多いでしょう。しかしバラバラの値が入った '<tt>menu_order</tt>' を持つ任意の投稿タイプに対して使うことができます(デフォルト値は <var>0</var>)。
 +
** '<tt>meta_value</tt>' - カスタムフィールドで並び替える。'<tt>meta_key=keyname</tt>' がクエリに存在しなければいけません。また、ソート順は文字列順になることに注意して下さい。数値だと予想外の挙動をします(通常、1, 3, 4, 6, 34, 56となると思うところが、1, 3, 34, 4, 56, 6となります)。数値なら代わりに '<tt>meta_value_num</tt>' を使ってください。カスタムフィールドの値を特定の型にキャストしたければ '<tt>meta_type</tt>' を指定できます。有効な値は 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED' です('<tt>meta_query</tt>' と同じ)。'<tt>meta_type</tt>' を使うとき、それに応じて '<tt>meta_value_*</tt>' も使えます。例えば '<tt>meta_type</tt>' に DATETIME を指定するとき、ソート順の定義に '<tt>meta_value_datetime</tt>' を使えます。
 +
** '<tt>meta_value_num</tt>' - カスタムフィールドの値を数値として並び替える。([[Version 2.8|バージョン 2.8]] 以降で使用可能)。これもまた、'<tt>meta_key=keyname</tt>'がクエリに存在しなければならないことに注意して下さい。こちらは '<tt>meta_value</tt>' 示したような数値での並べ替えを可能にします。
 +
** '<tt>post__in</tt>' - <tt>post__in</tt> パラメータの配列に並んだ投稿 ID の順になります([[Version 3.5|バージョン 3.5]] 以降で利用可能)。
 +
** '<tt>post_name__in</tt>' - '<tt>post_name__in</tt>' パラメータの配列に並んだ投稿スラッグの順になります([[Version 4.6|バージョン 4.6]] 以降で利用可能)。'''参考''': このとき <tt>order</tt> パラメータの値はソート順を変えません。
 +
** '<tt>post_parent__in</tt>' - '<tt>post_parent__in</tt>' パラメータの配列に並んだ親投稿 ID の順になります([[Version 4.6|バージョン 4.6]] 以降で利用可能)。'''参考''': このとき <tt>order</tt> パラメータの値はソート順を変えません。
  
 
'''タイトルで投稿をソート表示、降順'''
 
'''タイトルで投稿をソート表示、降順'''
  
Display posts sorted by post title in a descending order:
+
投稿をその 'title' で降順に並べ替えて表示します:
  
$query = new WP_Query( array ( 'orderby' => 'title', 'order' => 'DESC' ) );
+
<pre>
 +
$args = array(
 +
'orderby' => 'title',
 +
'order'  => 'DESC',
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
 +
 
 +
投稿を 'menu_order' の降順でソートして表示します。同じ値なら投稿の 'title' の順にします:
 +
 
 +
<pre>
 +
$args = array(
 +
'orderby' => 'menu_order title',
 +
'order'   => 'DESC',
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
 
'''ランダムに投稿を表示'''
 
'''ランダムに投稿を表示'''
655行目: 849行目:
 
ランダムに投稿を1件表示する:
 
ランダムに投稿を1件表示する:
  
$query = new WP_Query( array ( 'orderby' => 'rand', 'posts_per_page' => '1' ) );
+
<pre>
 +
$args = array(
 +
'orderby'       => 'rand',
 +
'posts_per_page' => '1',
 +
 
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
 
'''人気の投稿を表示'''
 
'''人気の投稿を表示'''
  
投稿をコメント数順に表示する:
+
投稿をコメント数の順に表示する:
  
$query = new WP_Query( array( 'orderby' => 'comment_count' ) );
+
<pre>
 +
$args = array(
 +
'orderby' => 'comment_count'
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
 
'''値段順にソートした商品を表示'''
 
'''値段順にソートした商品を表示'''
  
Display posts with 'Product' type ordered by 'Price' custom field:
+
'Product' 投稿タイプをカスタムフィールド 'Price' で並び替えて表示:
  
$query = new WP_Query( array ( 'post_type' => 'product', 'orderby' => 'meta_value', 'meta_key' => 'price' ) );
+
<pre>
 +
$args = array(
 +
'post_type' => 'product',
 +
'orderby'   => 'meta_value_num',
 +
'meta_key' => 'price',
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
''' 'orderby'で複数の値'''
+
'''複数の値を 'orderby' に指定'''
  
Display pages ordered by 'title' and 'menu_order':
+
固定ページを 'title' 'menu_order' で並び替えて表示(タイトルが優先):
  
$query = new WP_Query( array( 'post_type' => 'page', 'orderby' => 'title menu_order', 'order' => 'ASC' ) );
+
<pre>
 +
$args = array(
 +
'post_type' => 'page',
 +
'orderby'   => 'title menu_order',
 +
'order'     => 'ASC',
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
'''配列を使用して複数の'orderby' '''
+
'''配列を使って複数の値を 'orderby' に指定'''
  
Display pages ordered by 'title' and 'menu_order' with different sort orders (ASC/DESC) (available since [[Version 4.0]]):
+
別々の表示順(昇順/降順)の 'title' 'menu_order' で並べ替えた固定ページを表示([[Version 4.0|バージョン 4.0]] から利用可能):
  
 
<pre>
 
<pre>
686行目: 906行目:
 
</pre>
 
</pre>
  
*[http://make.wordpress.org/core/2014/08/29/a-more-powerful-order-by-in-wordpress-4-0/ A more powerful ORDER BY in WordPress 4.0]
+
* 参考:[http://make.wordpress.org/core/2014/08/29/a-more-powerful-order-by-in-wordpress-4-0/ A more powerful ORDER BY in WordPress 4.0]
  
 
+
'''複数の orderby とソート項目のペア'''
'''Mulitiple orderby/order pairs'''
+
  
 
<pre>
 
<pre>
699行目: 918行目:
 
</pre>
 
</pre>
  
'''' 'meta_value' とカスタム投稿タイプで orderby '''
+
'''カスタムフィールドとカスタム投稿タイプを 'orderby' に指定'''
  
Display posts of type 'my_custom_post_type', ordered by 'age', and filtered to show only ages 3 and 4 (using meta_query).
+
投稿タイプが 'my_custom_post_type' 'age' 順、そして 'age' が3か4のものだけを表示(meta_query を使用)。
  
 
<pre>
 
<pre>
720行目: 939行目:
 
</pre>
 
</pre>
  
 +
'''複数の meta_key を伴う orderby の指定'''
  
{{Stub}}
+
投稿メタの異なる2項目を使って並び替えたいとき(例: まず City で次に State)、メタクエリを合体させて orderby へ関連づける必要があります。そのとき「名前付きメタクエリ」を使います。次の例を見てください:
Do you know how to sort the query if the meta_value is an array? Write it here :)
+
  
<div id="Sticky_Post_Parameters">
+
<pre>
 +
$q = new WP_Query( array(
 +
    'meta_query' => array(
 +
        'relation' => 'AND',
 +
        'state_clause' => array(
 +
            'key' => 'state',
 +
            'value' => 'Wisconsin',
 +
        ),
 +
        'city_clause' => array(
 +
            'key' => 'city',
 +
            'compare' => 'EXISTS',
 +
        ),
 +
    ),
 +
    'orderby' => array(
 +
        'city_clause' => 'ASC',
 +
        'state_clause' => 'DESC',
 +
    ),
 +
) );
 +
</pre>
  
===先頭固定投稿パラメータ===
+
上のコードは WPSE の cybmeta による [http://wordpress.stackexchange.com/a/246358/3687 この例] から引用しました。
</div>
+
  
Show [[Sticky Posts |この投稿を先頭に固定表示]] /[[:en:Sticky Posts |en Sticky Posts]] or ignore them.
 
  
* '''<tt>caller_get_posts</tt>''' (''bool'') - ignore sticky posts or not. '''Deprecated''' as of [[Version 3.1]] in favor of '<tt>ignore_sticky_posts</tt>'.
+
=== 日付パラメータ<span id="Date_Parameters"></span> ===
* '''<tt>ignore_sticky_posts</tt>''' (''bool'') - ignore sticky posts or not. Default value is 0, don't ignore. Ignore/exclude sticky posts being included at the beginning of posts returned, but the sticky post will still be returned in the natural order of that list of posts returned.
+
  
'''Show Sticky Posts'''
+
ある期間に関連付けられた投稿を表示する。
  
Display just the first sticky post:
+
* '''<tt>year</tt>''' (''整数'') - 4桁の年 (例: 2011)。
 +
* '''<tt>monthnum</tt>''' (''整数'') - 月 (1 から 12)。
 +
* '''<tt>w</tt>''' (''整数'') - 週の番号 (0 から 53)。[http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_week MySQL の WEEK コマンド] を使用。このモードは "start_of_week" オプションに依存します。
 +
* '''<tt>day</tt>''' (''整数'') - 日 (1 から 31)。
 +
* '''<tt>hour</tt>''' (''整数'') - 時 (0 から 23)。
 +
* '''<tt>minute</tt>''' (''整数'') - 分 (0 から 60)。
 +
* '''<tt>second</tt>''' (''整数'') - 秒 (0 から 60)。
 +
* '''<tt>m</tt>''' (''整数'') - 年と月 (例えば: '''<tt>201307</tt>''')。
  
$sticky = get_option( 'sticky_posts' );
+
* '''<tt>date_query</tt>''' (''配列'') - 複雑な指定ができる日付パラメータ ([[Version 3.7|バージョン 3.7]] から利用可能)
$query = new WP_Query( 'p=' . $sticky[0] );
+
** '''<tt>year</tt>''' (''整数'') - 4桁の年 (例: 2011)。
 +
** '''<tt>monthnum</tt>''' (''整数'') - 月 (1 から 12)。
 +
** '''<tt>w</tt>''' (''整数'') - 週の番号 (0 から 53)。
 +
** '''<tt>day</tt>''' (''整数'') - 日 (1 から 31)。
 +
** '''<tt>hour</tt>''' (''整数'') - 時 (0 から 23)。
 +
** '''<tt>minute</tt>''' (''整数'') - 分 (0 から 60)。
 +
** '''<tt>second</tt>''' (''整数'') - 秒 (0 から 60)。
 +
** '''<tt>after</tt>''' (''文字列/配列'') - この日付より後の投稿を取得。<tt>[http://php.net/strtotime strtotime()]</tt> 互換の文字列、または 'year', 'month', 'day' の値を持つ配列を指定可能:
 +
*** '''<tt>year</tt>''' ('文字列'') 4桁の年。デフォルトは空文字列。
 +
*** '''<tt>month</tt>''' (''文字列'') 月 (1 から 12)。デフォルトは12。
 +
*** '''<tt>day</tt>''' (''文字列'') 日 (1 から 31)。デフォルトは月の最終日。
 +
** '''<tt>before</tt>''' (''文字列/配列'') - この日付より前の投稿を取得。<tt>[http://php.net/strtotime strtotime()]</tt> 互換の文字列、または 'year', 'month', 'day' の値を持つ配列を指定可能:
 +
*** '''<tt>year</tt>''' (''文字列'') 4桁の年。デフォルトは空文字列。
 +
*** '''<tt>month</tt>''' (''文字列'') 月 (1 から 12)。デフォルトは1。
 +
*** '''<tt>day</tt>''' (''文字列'') 日 (1 から 31)。デフォルトは1。
 +
** '''<tt>inclusive</tt>''' (''真偽値'') - <tt>after</tt> と <tt>before</tt> について、指定された日付ぴったりを含めるかどうか。
 +
** '''<tt>compare</tt>''' (''文字列'') - [https://developer.wordpress.org/reference/classes/wp_date_query/get_compare/ WP_Date_Query::get_compare()] を見てください。
 +
** '''<tt>column</tt>''' (''文字列'') - クエリ対象とする(wp_posts テーブルの)[[Database_Description#Table:_wp_posts|カラム]]。デフォルトは 'post_date'。
 +
** '''<tt>relation</tt>''' (''文字列'') -  OR または AND。子の配列をどのように結合して比較するか。デフォルトは AND。
  
Display just the first sticky post, if none return the last post published:
 
  
$args = array(
+
'''2012年12月12日の投稿を返す:'''
'posts_per_page' => 1,
+
'post__in' => get_option( 'sticky_posts' ),
+
'ignore_sticky_posts' => 1
+
);
+
$query = new WP_Query( $args );
+
  
Display just the first sticky post, if none return nothing:
+
<pre>
 +
$query = new WP_Query( 'year=2012&monthnum=12&day=12' );
 +
</pre>
  
$sticky = get_option( 'sticky_posts' );
+
または:
$args = array(
+
'posts_per_page' => 1,
+
'post__in'  => $sticky,
+
'ignore_sticky_posts' => 1
+
);
+
$query = new WP_Query( $args );
+
if ( $sticky[0] ) {
+
// insert here your stuff...
+
}
+
  
'''Don't Show Sticky Posts'''
+
<pre>
 +
$args = array(
 +
'date_query' => array(
 +
array(
 +
'year' => 2012,
 +
'month' => 12,
 +
'day'  => 12,
 +
),
 +
),
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
Exclude all sticky posts from the query:
+
'''今日の投稿を返す:'''
  
$query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );
+
<pre>
 +
$today = getdate();
 +
$query = new WP_Query( 'year=' . $today['year'] . '&monthnum=' . $today['mon'] . '&day=' . $today['mday'] );
 +
</pre>
  
Exclude sticky posts from a category. Return ALL posts within the category, but don't show sticky posts at the top. The 'sticky posts' will still show in their natural position (e.g. by date):
+
または:
  
$query = new WP_Query( 'ignore_sticky_posts=1&posts_per_page=3&cat=6' );
+
<pre>
 +
$today = getdate();
 +
$args = array(
 +
'date_query' => array(
 +
array(
 +
'year'  => $today['year'],
 +
'month' => $today['mon'],
 +
'day'  => $today['mday'],
 +
),
 +
),
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
Exclude sticky posts from a category. Return posts within the category, but exclude sticky posts completely, and adhere to paging rules:
+
'''今週の投稿を返す:'''
  
$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
+
<pre>
$sticky = get_option( 'sticky_posts' );
+
$week = date( 'W' );
$args = array(
+
$year = date( 'Y' );
'cat' => 3,
+
$query = new WP_Query( 'year=' . $year . '&w=' . $week );
'ignore_sticky_posts' => 1,
+
</pre>
'post__not_in' => $sticky,
+
'paged' => $paged
+
);
+
$query = new WP_Query( $args );
+
  
<div id="Time_Parameters">
+
または:
  
===時間パラメータ===
+
<pre>
</div>
+
$args = array(
 +
'date_query' => array(
 +
array(
 +
'year' => date( 'Y' ),
 +
'week' => date( 'W' ),
 +
),
 +
),
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
ある期間に関連付けられた投稿を表示する。
+
'''平日の午前9時から午後5時までの投稿を返す'''
  
* '''<tt>year</tt>''' (''int'') - 4ケタの年 (例. 2011).
+
<pre>
* '''<tt>monthnum</tt>''' (''int'') - 月 (1 から 12).
+
$args = array(
* '''<tt>w</tt>''' (''int'') - 週数 (0 から 53). Uses the [http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_week MySQL WEEK command Mode=1].
+
'date_query' => array(
* '''<tt>day</tt>''' (''int'') - 日 (1 から 31).
+
array(
* '''<tt>hour</tt>''' (''int'') - 時 (0 から 23).
+
'hour'     => 9,
* '''<tt>minute</tt>''' (''int'') - 分 (0 から 60).
+
'compare'   => '>=',
* '''<tt>second</tt>''' (''int'') - 秒 (0 から 60).
+
),
 +
array(
 +
'hour'     => 17,
 +
'compare'   => '<=',
 +
),
 +
array(
 +
'dayofweek' => array( 2, 6 ),
 +
'compare'   => 'BETWEEN',
 +
),
 +
),
 +
'posts_per_page' => -1,
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
'''現在の日付の記事を返す:'''
+
'''1月1日から2月28日までの投稿を返す'''
  
$today = getdate();
+
<pre>
$query = new WP_Query( 'year=' . $today["year"] . '&monthnum=' . $today["mon"] . '&day=' . $today["mday"] );
+
$args = array(
 +
'date_query' => array(
 +
array(
 +
'after'    => 'January 1st, 2013',
 +
'before'    => array(
 +
'year' => 2013,
 +
'month' => 2,
 +
'day=> 28,
 +
),
 +
'inclusive' => true,
 +
),
 +
),
 +
'posts_per_page' => -1,
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
'''今週の記事を返す:'''
+
注意:<tt>before</tt> パラメータに <tt>[http://php.net/strtotime strtotime()]</tt> 互換の文字列として日付だけを指定すると、その日の 00:00:00 に変換されます。この場合、<tt>inclusive</tt> が true でも、指定した日はクエリ結果に含まれません。<tt>before</tt> に指定した日を含めたければ、<tt>'before' => '2013-02-28 23:59:59'</tt> のように時刻も含めるか、または配列形式(<tt>inclusive</tt> をセットすると自動調整される)を使ってください。
  
$week = date('W');
+
'''1年より前の投稿で1ヶ月以内に変更されたものを返す'''
$year = date('Y');
+
$query = new WP_Query( 'year=' . $year . '&w=' . $week );
+
  
'''12月20日の投稿を返す:'''
+
<pre>
 +
$args = array(
 +
'date_query' => array(
 +
array(
 +
'column' => 'post_date_gmt',
 +
'before' => '1 year ago',
 +
),
 +
array(
 +
'column' => 'post_modified_gmt',
 +
'after'  => '1 month ago',
 +
),
 +
),
 +
'posts_per_page' => -1,
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
$query = new WP_Query( 'monthnum=12&day=20' );
+
<tt>'date_query'</tt> 句を入れ子にして複雑なクエリを指定できます。構文について詳しくは [[#Taxonomy Parameters|タクソノミーのパラメータ]] を見てください。
  
'''Note:''' The queries above return posts for a specific date period in history, i.e. "Posts from X year, X month, X day". They are unable to fetch posts from a timespan relative to the present, so queries like "Posts from the last 30 days" or "Posts from the last year" are not possible with a basic query, and require use of the posts_where filter to be completed. The examples below use the posts_where [[Plugin_API#Filters | filter]], and should be modifyable for most time-relative queries.
 
  
'''2009年3月1日から3月15日までの投稿を返す:'''
+
<div id="Custom_Field_Parameters">
<pre>
+
===カスタムフィールドのパラメータ===
// Create a new filtering function that will add our where clause to the query
+
</div>
function filter_where( $where = '' ) {
+
// posts for March 1 to March 15, 2010
+
$where .= " AND post_date >= '2010-03-01' AND post_date < '2010-03-16'";
+
return $where;
+
}
+
  
add_filter( 'posts_where', 'filter_where' );
+
あるカスタムフィールドに関連付けられた投稿を表示します。
$query = new WP_Query( $query_string );
+
remove_filter( 'posts_where', 'filter_where' );
+
</pre>
+
  
'''過去30日間からの投稿を返す:'''
+
クエリのこの部分は <tt>[[クラスリファレンス/WP_Meta_Query | WP_Meta_Query]]</tt> /[[:en:Class_Reference/WP_Meta_Query|en]] でパースされます。ここに示したリストは古くなるかもしれないので [[クラスリファレンス/WP_Meta_Query#Accepted_Arguments |WP_Meta_Query の引数の説明]] /[[:en:Class_Reference/WP_Meta_Query#Accepted_Arguments|en]] も見てください。
<pre>
+
// Create a new filtering function that will add our where clause to the query
+
function filter_where( $where = '' ) {
+
// posts in the last 30 days
+
$where .= " AND post_date > '" . date('Y-m-d', strtotime('-30 days')) . "'";
+
return $where;
+
}
+
  
add_filter( 'posts_where', 'filter_where' );
+
* '''<tt>meta_key</tt>''' (''文字列'') - カスタムフィールドのキー。
$query = new WP_Query( $query_string );
+
* '''<tt>meta_value</tt>''' (''文字列'') - カスタムフィールドの値(文字列として比較)。
remove_filter( 'posts_where', 'filter_where' );
+
* '''<tt>meta_value_num</tt>''' (''数値'') - カスタムフィールドの値(数値として比較)。
</pre>  
+
* '''<tt>meta_compare</tt>''' (''文字列'') -'<tt>meta_value</tt>'のテスト演算子。 使える値は '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' および 'RLIKE' です。デフォルトは '=' です。
  
'''30から60日経過した投稿を返す'''
+
* '''<tt>meta_query</tt>''' (''配列'') - カスタムフィールドの複雑なパラメータ ([[Version 3.1|バージョン 3.1]] より利用可能)。
<pre>
+
** '''<tt>relation</tt>''' (''文字列'') - meta_query の中に2つ以上の配列を入れたときの論理的な関係。使える値は 'AND' 'OR' です(デフォルト: 'AND')。ひとつだけ配列を入れるときは使わないでください。
// Create a new filtering function that will add our where clause to the query
+
function filter_where( $where = '' ) {
+
// posts  30 to 60 days old
+
$where .= " AND post_date >= '" . date('Y-m-d', strtotime('-60 days')) . "'" . " AND post_date <= '" . date('Y-m-d', strtotime('-30 days')) . "'";
+
return $where;
+
}
+
  
add_filter( 'posts_where', 'filter_where' );
+
<tt>meta_query</tt> には次のキーを持った配列をひとつまたは複数入れることができます:
$query = new WP_Query( $query_string );
+
remove_filter( 'posts_where', 'filter_where' );
+
</pre>
+
  
Starting with 4.1, <tt>'date_query'</tt> clauses can be nested in order to construct complex queries. See [[#タクソノミーパラメータ|タクソノミーパラメータ]] for details on the syntax.
+
* '''<tt>key</tt>''' (''文字列'') - カスタムフィールドのキー。
 +
* '''<tt>value</tt>''' (''文字列''|''配列'') - カスタムフィールドの値。配列を指定できるのは <tt>'''compare'''</tt> が <tt>'IN'</tt>, <tt>'NOT IN'</tt>, <tt>'BETWEEN'</tt> または <tt>'NOT BETWEEN'</tt> の場合です。WordPress 3.9 以上で <tt>'''compare'''</tt> に <tt>'EXISTS'</tt> または <tt>'NOT EXISTS'</tt> を指定する場合は <tt>value</tt> を省略できます。<br>(<strong>参考:</strong> [http://core.trac.wordpress.org/ticket/23268 bug #23268] の影響で、<strong>バージョン 3.9 より前</strong>では <tt>NOT EXISTS</tt> による比較を正しく動作させるために <tt>value</tt> が必要です。<tt>value</tt> パラメータに''何らかの''文字列を与えなければなりません。空文字列や NULL では動作しません。しかし他のどんな文字列でもトリックが効き、<tt>NOT EXISTS</tt> を使ったときに SQL に'''現れません'''。ピンとこなければ <tt>'bug #23268'</tt> を見てみては?)。
 +
* '''<tt>compare</tt>''' (''文字列'') - テスト演算子。使える値は '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' および 'NOT EXISTS' です。デフォルトは '=' です。
 +
* '''<tt>type</tt>''' (''文字列'') - カスタムフィールドの値のタイプ。使える値は 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED' です。デフォルトは 'CHAR' です。'DECIMAL' と 'NUMERIC' には有効桁数と小数点以下の桁数を指定できます(例: 'DECIMAL(10,5)' や 'NUMERIC(10)' が有効)。
  
 +
'type' を DATE、'compare' を BETWEEN にして正しく比較できるのは、日付が YYYY-MM-DD 形式で保存されていて同じ形式の日付と比較する場合のみです。
  
<div id="Custom_Field_Parameters">
+
'''重要な参考ポイント:''' <tt>meta_query</tt> はカスタムフィールド検索条件('''配列''')の'''配列''' をパラメータにします(つまり配列の配列です)。次の例に出てきます。
 +
この構造によって複数のカスタムフィールドを検索できますが、その時は最初の(外側の)配列の '''<tt>relation</tt>''' パラメータによって複数のカスタムフィールド検索の関係を指定します。使える値は 'AND' と 'OR' です。デフォルト 'AND' です。
  
===カスタムフィールドパラメータ===
 
</div>
 
  
あるカスタムフィールドに関連付けられた投稿を表示する。
+
'''簡単なカスタムフィールドクエリ:'''
  
* '''<tt>meta_key</tt>''' (''文字列'') - カスタムフィールドキー
+
カスタムフィールドの値に関係なく、カスタムフィールドのキーが 'color' の投稿を表示します:
* '''<tt>meta_value</tt>''' (''文字列'') - カスタブフィールドの値
+
* '''<tt>meta_compare</tt>''' (''文字列'') -'<tt>meta_value</tt>'のテスト演算子。 使える値は '!=', '>', '>=', '<', '<='です。デフォルト値は'='です。
+
  
* '''<tt>meta_query</tt>''' (''array'') - カスタムフィールドのパラメータ ([[Version 3.1]]より利用可能)
+
$query = new WP_Query( array( 'meta_key' => 'color' ) );
** '''<tt>key</tt>''' (''文字列'') - カスタムフィールドキー
+
** '''<tt>value</tt>''' (''文字列''|''array'') - カスタブフィールドの値 (''Note'': Array support is limited to a compare value of 'IN', 'NOT IN', 'BETWEEN', or 'NOT BETWEEN')
+
** '''<tt>compare</tt>''' (''文字列'') - テスト演算子。 使える値は '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN'です。デフォルト値は '='です。
+
** '''<tt>type</tt>''' (''文字列'') - カスタムフィールド投稿タイプ。 使える値は 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED'です。 デフォルト値は'CHAR'です。
+
  
'''簡単なカスタムフィールドクエリ:'''
+
カスタムフィールドのキーに関係なく、カスタムフィールドの値が 'blue' の投稿を表示します:
  
カスタムフィールドの値に関係なく、カスタムフィールドのキーが'color'の記事を表示します:
+
$query = new WP_Query( array( 'meta_value' => 'blue' ) );
  
$query = new WP_Query( 'meta_key=color' );
+
カスタムフィールドのキーに関係なく、カスタムフィールドの値が 'blue' の[[Pages|固定ページ]]を表示します:
  
カスタムフィールドのキーに関係なく、カスタムフィールドの値が'blue'の記事を表示します:
+
<pre>
 +
$args = array(
 +
'meta_value' => 'blue',
 +
'post_type'  => 'page'
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
$query = new WP_Query( 'meta_value=blue' );
+
カスタムフィールドのキーが 'color'、値が 'blue' の投稿を表示します:
  
Display [[Pages|Page]] where the custom field value is 'blue', regardless of the custom field key:
+
<pre>
 +
$args = array(
 +
'meta_key'  => 'color',
 +
'meta_value' => 'blue'
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
$query = new WP_Query( 'meta_value=blue&post_type=page' );
+
カスタムフィールドのキーが 'color'、値が 'blue' '''ではない'''投稿を表示します:
  
Display posts where the custom field key is 'color' and the custom field value is 'blue':
+
<pre>
 +
$args = array(
 +
'meta_key'    => 'color',
 +
'meta_value'  => 'blue',
 +
'meta_compare' => '!='
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
$query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue' ) );
+
カスタムフィールドの値が数値である投稿を表示する例です。その数値が10未満の投稿だけを表示します。(<tt>WP_Query</tt> は比較に次の式を使います: <code>$post_meta . $args['meta_compare'] . $args['meta_value']</code> - ここで <tt>'$post_meta'</tt> は各投稿に保存されている投稿メタの値です。値を置換した後の実際の式は: <tt>$post_meta < 10</tt>)
  
Display posts where the custom field key is 'color' and the custom field value IS NOT 'blue':
+
<pre>
 +
$args = array(
 +
'post_type' => 'post',
 +
'meta_key' => 'number',
 +
'meta_value_num' => 10,
 +
'meta_compare' => '<',
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
$query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue', 'meta_compare' => '!=' ) );
+
イベントの投稿('event' カスタム投稿タイプ)を表示します。開催日のカスタムフィールドのキーが 'event_date'、値が今日以降とします。
  
Display 'product'(s) where the custom field key is 'price' and the custom field value that is LESS THAN OR EQUAL TO 22.  ''Note the value 99 will be considered greater than 100 as the data is stored as 'strings', not 'numbers'.''
+
<pre>
 +
$args = array(
 +
'post_type'   => 'event',
 +
'meta_key'     => 'event_date',
 +
'meta_value'   => date( "Ymd" ), // 'event_date' の保存形式に合わせる
 +
'meta_compare' => '>',
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
$query = new WP_Query( array( 'meta_key' => 'price', 'meta_value' => '22', 'meta_compare' => '<=', 'post_type' => 'product' ) );
+
製品('product' カスタム投稿タイプ)のうち、値段('price' カスタムフィールド)が 22 '''以下''' であるものを表示します。<br />''値を指定するのに 'meta_value' パラメータを使うと 99 が 100 より大きいと判定されます(数値ではなく文字列として保存されているため)。''
  
Display posts with a custom field value of zero (0), regardless of the custom field key:
+
<pre>
 +
$args = array(
 +
'meta_key'        => 'price',
 +
'meta_value_num'  => '22',
 +
'meta_compare'    => '<=',
 +
'post_type'        => 'product'
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
$query = new WP_Query( array ( 'meta_value' => '_wp_zero_value' ) );
+
カスタムフィールドのキーに関係なく、値がゼロ (0) のカスタムフィールドを持つ投稿を表示します:
 +
 
 +
<pre>
 +
$args = array(
 +
'meta_value' => '_wp_zero_value'
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
  
 
'''単一のカスタムフィールドの取扱い:'''
 
'''単一のカスタムフィールドの取扱い:'''
925行目: 1,265行目:
 
  $query = new WP_Query( $args );
 
  $query = new WP_Query( $args );
  
(Note that meta_query expects nested arrays, even if you only have one query.)
+
(meta_query はクエリがひとつだけでも入れ子の配列を指定しなければなりません。)
  
 
'''複数のカスタムフィールドの取扱い:'''
 
'''複数のカスタムフィールドの取扱い:'''
  
複数のカスタムフィールドから記事を表示します:
+
製品(カスタム投稿タイプ 'product')について、色(カスタムフィールドのキー 'color')が青('blue')ではない('NOTE LIKE')か、または値段(キー 'price'、タイプ 'numeric')が20と100の間にある('BETWEEN')ものを表示します。
 
+
$args = array(
+
'post_type' => 'product',
+
'meta_query' => array(
+
array(
+
'key' => 'color',
+
'value' => 'blue',
+
'compare' => 'NOT LIKE'
+
),
+
array(
+
'key' => 'price',
+
'value' => array( 20, 100 ),
+
'type' => 'numeric',
+
'compare' => 'BETWEEN'
+
)
+
)
+
  );
+
$query = new WP_Query( $args );
+
 
+
Display posts that have meta key 'color' NOT LIKE value 'blue' OR meta key 'price' with values BETWEEN 20 and 100:
+
  
 
<pre>
 
<pre>
$args = array(
+
$args = array(
'post_type' => 'product',
+
'post_type' => 'product',
'meta_query' => array(
+
'meta_query' => array(
 
'relation' => 'OR',
 
'relation' => 'OR',
array(
+
array(
'key' => 'color',
+
'key'     => 'color',
'value' => 'blue',
+
'value'   => 'blue',
'compare' => 'NOT LIKE'
+
'compare' => 'NOT LIKE',
),
+
),
array(
+
array(
'key' => 'price',
+
'key'     => 'price',
'value' => array( 20, 100 ),
+
'value'   => array( 20, 100 ),
'type' => 'numeric',
+
'type'   => 'numeric',
'compare' => 'BETWEEN'
+
'compare' => 'BETWEEN',
)
+
),
)
+
),
  );
+
);
$query = new WP_Query( $args );
+
$query = new WP_Query( $args );
 
</pre>
 
</pre>
  
Starting with version 4.1, <tt>meta_query</tt> clauses can be nested in order to construct complex queries.
+
<tt>'meta_query'</tt> 句は複雑なクエリが作れるように入れ子にできます。例えば製品(<tt>'product'</tt>)の中でオレンジ色(<tt>'color=orange'</tt>)または(<tt>'OR'</tt>)赤でサイズが小さい(<tt>'color=red&size=small'</tt>)のものを表示するのは、次のようなクエリに変換できます:
 
+
For example, "show me productss where color=orange OR color=red&size=small" translates to the following:
+
  
 
<pre>
 
<pre>
1,005行目: 1,323行目:
  
  
<div id="Permission_Parameters">
+
=== 権限パラメータ<span id="Permission_Parameters"></span>===
===権限パラメータ===
+
</div>
+
  
* '''<tt>perm</tt>''' (''string'') - User permission.
+
* '''<tt>perm</tt>''' (''文字列'') - ユーザー権限。
  
'''Show posts if user has the appropriate capability:'''
+
'''ユーザーが適切な権限を持つ場合に投稿を表示'''
  
Display published and private posts, if the user has the appropriate capability:
+
ユーザーが適切な権限を持つ場合に、公開済みと非公開の投稿を表示します:
  
 
<pre>
 
<pre>
1,023行目: 1,339行目:
 
</pre>
 
</pre>
  
<div id="Caching Parameters">
 
===キャッシュパラメータ===
 
</div>
 
  
Stop the data retrieved from being added to the cache.
+
=== MIME タイプのパラメータ<span id="Mime Type Parameters"></span> ===
 +
 
 +
添付ファイル(attachments)投稿タイプと共に使ってください。
 +
* '''<tt>post_mime_type</tt>''' (''文字列/配列'') - この MIME タイプに限定。
 +
 
 +
'''''gif'' 画像の添付ファイルを取得:'''
 +
 
 +
gif 画像を取得します。添付ファイルのデフォルトの投稿ステータスが '''inherit''' であることに注意してください。
 +
 
 +
<pre>
 +
$args = array(
 +
'post_type' => 'attachment',
 +
'post_status' => 'inherit',
 +
'post_mime_type' => 'image/gif',
 +
);
 +
$query = new WP_Query( $args );
 +
</pre>
 +
 
 +
'''画像ではない添付ファイルを取得:'''
 +
 
 +
特定の MIME タイプを除外するには、まず [https://codex.wordpress.org/Function_Reference/get_allowed_mime_types get_allowed_mime_types()] を使ってすべての MIME タイプを取得します。そして [http://php.net/manual/en/function.array-diff.php array_diff()] を使って除外する MIME タイプとの差を求め、それを指定します。
 +
 
 +
<pre>
 +
$unsupported_mimes  = array( 'image/jpeg', 'image/gif', 'image/png', 'image/bmp', 'image/tiff', 'image/x-icon' );
 +
$all_mimes          = get_allowed_mime_types();
 +
$accepted_mimes    = array_diff( $all_mimes, $unsupported_mimes );
 +
$args     = array(
 +
    'post_type'        => 'attachment',
 +
    'post_status'      => 'inherit',
 +
    'post_mime_type'    => $accepted_mimes,
 +
);
 +
$query     = new WP_Query( $query_args );
 +
</pre>
 +
 
 +
 
 +
=== キャッシュのパラメータ<span id="Caching_Parameters"></span> ===
 +
 
 +
取得したデータがキャッシュへ追加されるのを禁止します。
  
* '''<tt>cache_results</tt>''' (''boolean'') - Post information cache.
+
* '''<tt>cache_results</tt>''' (''真偽値'') - 投稿情報のキャッシュ。
* '''<tt>update_post_meta_cache</tt>''' (''boolean'') - Post meta information cache.
+
* '''<tt>update_post_meta_cache</tt>''' (''真偽値'') - 投稿のメタ情報のキャッシュ(カスタムフィールドなど)。
* '''<tt>update_post_term_cache</tt>''' (''boolean'') - Post term information cache.
+
* '''<tt>update_post_term_cache</tt>''' (''真偽値'') - 投稿のターム情報のキャッシュ(カテゴリーなど)。
  
'''Show Posts without adding post information to the cache'''
+
'''投稿情報をキャッシュへ追加せずに投稿を表示'''
  
Display 50 posts, but don't add post information to the cache:
+
50本の投稿を表示しますが、投稿情報をキャッシュへ追加しません:
  
 
<pre>
 
<pre>
1,045行目: 1,395行目:
 
</pre>
 
</pre>
  
'''Show Posts without adding post meta information to the cache'''
+
'''投稿メタ情報をキャッシュへ追加せずに投稿を表示'''
  
Display 50 posts, but don't add post meta information to the cache:
+
50本の投稿を表示しますが、投稿メタ情報をキャッシュへ追加しません:
  
 
<pre>
 
<pre>
1,057行目: 1,407行目:
 
</pre>
 
</pre>
  
'''Show Posts without adding post term information to the cache'''
+
'''投稿ターム情報をキャッシュへ追加せずに投稿を表示'''
  
Display 50 posts, but don't add post term information to the cache:
+
50本の投稿を表示しますが、投稿ターム情報をキャッシュへ追加しません:
  
 
<pre>
 
<pre>
1,069行目: 1,419行目:
 
</pre>
 
</pre>
  
In general usage you should not need to use these, adding to the cache is the right thing to do, however they may be useful in specific circumstances.  An example of such circumstances might be when using a WP_Query to retrieve a list of post titles and URLs to be displayed, but in which no other information about the post will be used and the taxonomy and meta data won't be needed. By not loading this information, you can save time from the extra unnecessary SQL queries.
+
一般的な使い方ならキャッシュへ追加するのが普通なので、これらのパラメータを使う必要はないでしょう。しかし特定の状況では役に立ちます。例えば投稿タイトルと URL を表示するために WP_Query を使うけれども、それ以外の情報を使わずタクソノミーとメタデータも不要な場合です。これらの情報を読み込まなければ余分な SQL クエリによる時間を節約できます。
  
'''Note''': If a persistent object cache backend (such as memcached) is used, these flags are set to false by default since there is no need to update the cache every page load when a persistent cache exists.
+
'''参考''': バックエンドに永続的オブジェクトキャッシュ(memcached など)が使われている場合、これらのフラグはデフォルトで false にされます。なぜなら永続的キャッシュがある時はページ読み込み毎にキャッシュを更新する必要がないからです。
  
  
<div id="Return Fields Parameter">
+
=== 戻り値パラメータ<span id="Return_Fields_Parameter"></span> ===
===戻り値パラメータ===
+
</div>
+
  
 
戻り値を設定します。
 
戻り値を設定します。
  
* '''<tt>fields</tt>''' (''文字列'') - Which fields to return. すべてのフィールドがデフォルトで返されます。他の二つのオプションがあります。:
+
* '''<tt>fields</tt>''' (''文字列'') - どのフィールドを返すか。
 
** '<tt>ids</tt>' - 投稿IDの配列を返します。
 
** '<tt>ids</tt>' - 投稿IDの配列を返します。
** '<tt>id=>parent</tt>' - <tt>ID</tt> <tt>post_parent</tt>プロパティでの<tt>stdClass</tt>オブジェクトの配列を返します。
+
** '<tt>id=>parent</tt>' - プロパティに <tt>ID</tt>(投稿ID)と <tt>post_parent</tt>(親のID)を持つ <tt>stdClass</tt> オブジェクトの配列を返します。
 
** 他の何かを渡すと、すべてのフィールドを返します。 (デフォルト) - 投稿オブジェクトの配列。
 
** 他の何かを渡すと、すべてのフィールドを返します。 (デフォルト) - 投稿オブジェクトの配列。
  
  
<div id="Filters">
+
== フィルター<span id="Filters"></span> ==
  
==フィルター==
+
以下のフィルターは投稿の配列を返すクエリを対象にします:
</div>
+
  
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_distinct|posts_distinct]] /[[:en:Plugin_API/Filter_Reference/posts_distinct|en]]</tt>''' - Alters SQL 'DISTINCTROW'節 - post配列を返すクエリを変更
+
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_distinct|posts_distinct]] /[[:en:Plugin_API/Filter_Reference/posts_distinct|en]]</tt>''' - クエリの SQL 'DISTINCTROW' 節を変更。
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_groupby|posts_groupby]] /[[:en:Plugin_API/Filter_Reference/posts_groupby|en]]</tt>''' - Alters SQL 'GROUP BY' 節 - post配列を返すクエリ。
+
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_groupby|posts_groupby]] /[[:en:Plugin_API/Filter_Reference/posts_groupby|en]]</tt>''' - クエリの SQL 'GROUP BY' 節を変更。
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_join|posts_join]] /[[:en:Plugin_API/Filter_Reference/posts_join|en]]</tt>''' - Alters SQL 'JOIN' 節 - post配列を返すクエリ。
+
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_join|posts_join]] /[[:en:Plugin_API/Filter_Reference/posts_join|en]]</tt>''' - クエリの SQL 'JOIN' 節を変更。
* '''<tt>[[プラグイン API/フィルターフック一覧/post_limits|post_limits]] /[[:en:Plugin_API/Filter_Reference/post_limits|en]]</tt>''' - Alters SQL 'LIMIT' 節 - post配列を返すクエリ。
+
* '''<tt>[[プラグイン API/フィルターフック一覧/post_limits|post_limits]] /[[:en:Plugin_API/Filter_Reference/post_limits|en]]</tt>''' - クエリの SQL 'LIMIT' 節を変更。
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_orderby|posts_orderby]] /[[:en:Plugin_API/Filter_Reference/posts_orderby|en]]</tt>''' - Alters SQL 'ORDER BY' 節 - post配列を返すクエリ。
+
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_orderby|posts_orderby]] /[[:en:Plugin_API/Filter_Reference/posts_orderby|en]]</tt>''' - クエリの SQL 'ORDER BY' 節を変更。
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_where|posts_where]] /[[:en:Plugin_API/Filter_Reference/posts_where|en]]</tt>''' - Alters SQL 'WHERE' 節 -  post配列を返すクエリ。
+
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_where|posts_where]] /[[:en:Plugin_API/Filter_Reference/posts_where|en]]</tt>''' - クエリの SQL 'WHERE' 節を変更。
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_join_paged|posts_join_paged]] /[[:en:Plugin_API/Filter_Reference/posts_join_paged|en]]</tt>''' - Alters SQL paging for posts using 'JOIN' 節 - post配列を返すクエリ。
+
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_join_paged|posts_join_paged]] /[[:en:Plugin_API/Filter_Reference/posts_join_paged|en]]</tt>''' - クエリの中で投稿のページネーションに用いる 'JOIN' 節を変更。
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_where_paged|posts_where_paged]] /[[:en:Plugin_API/Filter_Reference/posts_where_paged|en]]</tt>''' - Alters SQL paging for posts using 'WHERE' 節 -  post配列を返すクエリ。
+
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_where_paged|posts_where_paged]] /[[:en:Plugin_API/Filter_Reference/posts_where_paged|en]]</tt>''' - クエリの中で投稿のページネーションに用いる 'WHERE' 節を変更。
* '''posts_fields''' - Alters SQL 'SELECT' clause of the query that returns the post array.
+
* '''[https://developer.wordpress.org/reference/hooks/posts_fields/ posts_fields]''' - クエリの SQL 'SELECT' 節を変更。
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_clauses|posts_clauses]] /[[:en:Plugin_API/Filter_Reference/posts_clauses|en]]</tt>''' Alters ''all'' the SQL clauses above in one go. It gives you an array of elements that are easy to alter. ([[Version 3.1]]以降で使用可能).
+
* '''<tt>[[プラグイン API/フィルターフック一覧/posts_clauses|posts_clauses]] /[[:en:Plugin_API/Filter_Reference/posts_clauses|en]]</tt>''' - ここまでに挙げた SQL 節のすべてを一度に変更。節を要素とする配列が与えられ、変更が容易([[Version 3.1|バージョン3.1]]以降で使用可能)。
  
注: that there are more filters than the mentioned. As it is hard to keep the codex up to date, please inspect the <code>get_posts();</code> function inside the WP_Query class yourself (/wp-includes/query.php).
+
参考: これ以外にもフィルターがあります。この codex をいつも最新に保つのは難しいので、<code>WP_Query</code> クラス内の <code>get_posts()</code> メソッドを御自身で見てください({{Trac|wp-includes/class-wp-query.php}} にあります)。
  
<div class="Source_File">
 
  
==ソースファイル==
+
== 変更履歴<span id="Change_Log"></span> ==
</div>
+
  
<tt>WP_Query()</tt> は {{Trac|wp-includes/query.php}}にあります。
+
* [[Version 4.9|4.9.0]]:
 +
** Introduced the `$comment_count` parameter.
 +
* [[Version 4.6|4.6.0]]:
 +
** Add filter '<tt>posts_pre_query</tt>' to filter the posts array before the query takes place.
 +
** Add '<tt>post_name__in</tt>' to '<tt>$orderby</tt>'.
 +
* [[Version 4.5|4.5.0]]:
 +
** Removed the '<tt>$comments_popup</tt>' property.
  
<div class="Resources">
+
* [[Version 4.4|4.4.0]]:
 +
** Add filter '<tt>old_slug_redirect_url</tt>' to filter the old slug redirect URL.
 +
** Add the ability to pass a post ID to '<tt>$post</tt>' parameter of '<tt>setup_postdata</tt>' method and function.
 +
** Introduced '<tt>$post_name__in</tt>' and '<tt>$title</tt>' parameters.
 +
** '<tt>$s</tt>' was updated to support excluded search terms, by prepending a hyphen.
  
==外部リソース==
+
* [[Version 4.1|4.1.0]]:
</div>
+
** Add '<tt>$this</tt>' parameter to '<tt>the_post</tt>' action (The current Query object (passed by reference)).
 +
 
 +
 
 +
== ソースファイル<span id="Source_File"></span> ==
 +
 
 +
<tt>WP_Query()</tt> は {{Trac|wp-includes/class-wp-query.php}} にあります。
 +
 
 +
== 外部リソース<span id="External_Resources"></span> ==
  
 
=== 日本語 ===
 
=== 日本語 ===
1,126行目: 1,488行目:
 
* [http://scribu.net/wordpress/advanced-metadata-queries.html Advanced Metadata Queries in WordPress 3.1]
 
* [http://scribu.net/wordpress/advanced-metadata-queries.html Advanced Metadata Queries in WordPress 3.1]
 
* [https://gist.github.com/2023628 Comprehensive Argument Reference by Mark Luetke]
 
* [https://gist.github.com/2023628 Comprehensive Argument Reference by Mark Luetke]
* [http://web-profile.com.ua/wordpress/themes/wordpress-custom-loop/ WordPress custom loop]
+
* [http://web-profile.net/wordpress/themes/wordpress-custom-loop/ WordPress custom loop]
 +
* [https://premium.wpmudev.org/blog/mastering-wp-query/ An In-Depth Guide to Conquering WP_Query]
  
 
+
== 関連項目<span id="Related"></span> ==
== 関連 ==
+
  
 
{{Query Tags}}
 
{{Query Tags}}
1,135行目: 1,497行目:
 
{{Class Footer}}
 
{{Class Footer}}
  
{{NeedTrans|一部}}
+
{{原文|Class Reference/WP Query|162253}} <!-- 19:28, 16 March 2018 Ramon fincken 版 -->
 
+
{{原文|Function Reference/WP Query|152651}}<!-- 12:18, 20 July 2015‎ Barryceelen  版 -->
+
  
 
{{DEFAULTSORT:WP_Query}}
 
{{DEFAULTSORT:WP_Query}}
 
[[Category:クラス]]
 
[[Category:クラス]]
  
[[en:Function Reference/WP_Query]]
+
[[en:Class Reference/WP_Query]]
 +
[[it:Riferimento classi/WP_Query]]
 +
[[ko:Class Reference/WP_Query]]
 +
[[zh-hans:Class Reference/WP_Query]]
 +
[[pt-br:Referência de Classe/WP_Query]]

2018年5月31日 (木) 15:31時点における最新版

このページ「関数リファレンス/WP Query」は変更履歴節以降が未翻訳です。和訳や日本語情報を加筆してくださる協力者を求めています

説明

WP_Querywp-includes/class-wp-query.php に定義されているクラスで、WordPress ブログへの複雑な投稿やページのリクエストを取り扱います。 wp-blog-header.php (バージョン 2.0 では WP クラス) が $wp_query オブジェクトに現在のリクエストを定義する情報を与えることで、$wp_query はどのタイプのクエリを扱っているのか (カテゴリーアーカイブ、年月別アーカイブ、フィード、検索など) を確定し、要求された投稿を取り出します。$wp_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 をご覧ください。

参考: 自分のクエリで the_post() を使うのなら、そのクエリの後に wp_reset_postdata() を実行する必要があります。これはテンプレートタグがメインクエリの現在の投稿を再び使えるようにするためです。

参考: Ticket #18408 管理画面内で投稿をクエリする場合、wp_reset_postdata() が期待どおり動かないかもしれないので get_posts() を利用するとよいでしょう。

使い方

ふつうのループ

<?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>';
	/* Restore original Post Data */
	wp_reset_postdata();
} else {
	// no posts found
}

ふつうのループ(別の書き方)

<?php 
// the query
$the_query = new WP_Query( $args ); ?>

<?php if ( $the_query->have_posts() ) : ?>

	<!-- pagination here -->

	<!-- the loop -->
	<?php while ( $the_query->have_posts() ) : $the_query->the_post(); ?>
		<h2><?php the_title(); ?></h2>
	<?php endwhile; ?>
	<!-- end of the loop -->

	<!-- pagination here -->

	<?php wp_reset_postdata(); ?>

<?php else : ?>
	<p><?php esc_html_e( 'Sorry, no posts matched your criteria.' ); ?></p>
<?php endif; ?>

複数のループ

クエリが複数あるなら、複数のループを実行する必要があります。このように…

<?php

// クエリ
$query1 = new WP_Query( $args );

if ( $query1->have_posts() ) {
	// ループ
	while ( $query1->have_posts() ) {
		$query1->the_post();
		echo '<li>' . get_the_title() . '</li>';
	}

	/* オリジナルの投稿データを復元
	 * 注意: WP_Query を使っているのでオリジナルの $wp_query を壊すことは
	 * なく、wp_reset_query() によってリセットする必要はありません。
	 * 投稿データを wp_reset_postdata() で復元することだけが必要です。
	 */
	wp_reset_postdata();
}

/* 2つ目のクエリ (グローバル変数を使わない) */
$query2 = new WP_Query( $args2 );

if ( $query2->have_posts() ) {
	// 2つ目のループ
	while ( $query2->have_posts() ) {
		$query2->the_post();
		echo '<li>' . get_the_title( $query2->post->ID ) . '</li>';
	}

	// 元の投稿データを復元
	wp_reset_postdata();
}

?>


メソッドとプロパティ

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

プロパティ

$query
$wp_query オブジェクトに WP クラスによって渡されたクエリストリングを含む。
$query_vars
解析された $query を保持する連想配列。クエリ変数と対応する値の配列。
$queried_object
リクエストがカテゴリー、作者ページ、パーマリンク、投稿または固定ページだった場合に適用される。リクエストされたクエリの情報を含む。
$queried_object_id
リクエストがカテゴリー、作者ページ、パーマリンク、投稿または固定ページだった場合、対応する ID を含む。
$posts
要求された投稿をデータベースから取得したもの。
$post_count
表示される投稿の数。
$found_posts
現在のクエリ変数に一致する投稿の合計数。
$max_num_pages
ページの合計数。$found_posts を $posts_per_page で割った結果。
$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
リクエストがどのタイプなのかを判断するためのブーリアン値。最初の3つの例で言えば、「これはパーマリンクか?」「これは固定ページか?」「これは何らかのアーカイブページか?」となる。こちらもお読みください: 条件分岐タグ

メソッド

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

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 に値を入れる。参考: これは WP_Query を引数付きで生成するとき呼び出される。これに冪等性(idempotent)はないので、同じクエリオブジェクトについて2回以上呼び出してはいけない。もし行うとクエリが壊れる可能性がある。
next_post()
(ループ内でのみ使用可能) $posts で次の投稿に進む。$current_post を1つ増やし、$post を (新規の) 現在の投稿オブジェクトに設定する (注: グローバル $post 変数を設定はせず、WP_Query オブジェクトのインスタンス変数のみに適用される) 。現在の投稿オブジェクトを返す。(注意: これは非推奨です。next_post_link() を使ってください。)
the_post()
(ループ内でのみ使用可能)次の投稿に進み、グローバル変数$postを設定する。
have_posts()
(ループ内か、ループの前でのみ使用可能) 表示する投稿が残っているかを示す。残りの投稿がなければ内部で rewind_posts() を呼び出してから false を返す。rewind_posts() の影響により、have_posts() が連続して false を返すとは限りません。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()を呼び出す。


パラメータ

投稿者パラメータ

ある投稿者に関連付けられた投稿を表示する。

  • author (整数|文字列) - ユーザー ID またはそのコンマ区切りリスト。
  • author_name (文字列) - 'user_nicename' (姓・名・ニックネームではなく)。
  • author__in (配列) - ユーザーID (バージョン 3.7 以降で利用可能)。
  • author__not_in (配列) - ユーザーID (バージョン 3.7 以降で利用可能)。


ひとりの投稿者の投稿を表示する

ユーザー ID を用いて、ある投稿者の投稿を表示する場合:

$query = new WP_Query( 'author=123' );

'user_nicename' を用いて、ある投稿者の投稿を表示する場合:

$query = new WP_Query( 'author_name=rami' );

複数の投稿者の投稿を表示する

特定の複数の投稿者の投稿を表示する場合:

$query = new WP_Query( 'author=2,6,17,38' );

ある投稿者による投稿を除外する

'-'(マイナス)記号をユーザー ID の頭につけることで、あるひとり(singular)の投稿者による投稿を除いて、すべての記事を表示できます:

$query = new WP_Query( 'author=-12' );

複数の投稿者を扱う

複数の投稿者の投稿を表示する:

$query = new WP_Query( array( 'author__in' => array( 2, 6 ) ) );

以下の方法で複数の投稿者を除外することもできます:

$query = new WP_Query( array( 'author__not_in' => array( 2, 6 ) ) );


カテゴリーのパラメータ

あるカテゴリーに関連付けられた投稿を表示する。

  • cat (整数) - カテゴリー ID を使用します。
  • category_name (文字列) - カテゴリーのスラッグ(カテゴリ名ではありません)を使用します。
  • category__and (配列) - カテゴリー ID を使用します。
  • category__in (配列) - カテゴリー ID を使用します。
  • category__not_in (配列) - カテゴリー ID を使用します。


1つのカテゴリーの記事を表示

カテゴリーIDを使用して、そのカテゴリー(さらにそのカテゴリーの子カテゴリー)に属する記事を表示:

$query = new WP_Query( 'cat=4' );

カテゴリースラッグを使用して、そのカテゴリー(さらにそのカテゴリーの子カテゴリー)に属する記事を表示:

$query = new WP_Query( 'category_name=staff' );

カテゴリー ID を使って、そのカテゴリー (子カテゴリーではない)に属する記事を表示:

$query = new WP_Query( 'category__in=4' );

複数のカテゴリーから記事を表示

カテゴリー ID を使用して、それらのカテゴリーに属する記事を表示:

$query = new WP_Query( 'cat=2,6,17,38' );

カテゴリースラッグを使用して、それらのカテゴリーに属する記事を表示:

$query = new WP_Query( 'category_name=staff,news' );

それらのカテゴリーの "全て" に属する記事を表示:

$query = new WP_Query( 'category_name=staff+news' );

カテゴリーに属する記事を除外

ID に '-'(マイナス記号)が付いたカテゴリーの記事を除くすべての記事を表示:

$query = new WP_Query( 'cat=-12,-34,-56' );

複数カテゴリーの扱い

複数のカテゴリーに属する記事を表示。下記はカテゴリー ID が2と6の両方に属する記事を表示します:

$query = new WP_Query( array( 'category__and' => array( 2, 6 ) ) );

カテゴリー ID が2または6の記事を表示するには、前述の cat か、または category__in(これらのカテゴリーの子カテゴリーの記事は表示されないことに注意してください)を使うことで実現します:

$query = new WP_Query( array( 'category__in' => array( 2, 6 ) ) );

下記の方法で、複数のカテゴリーの記事を除外することもできます:

$query = new WP_Query( array( 'category__not_in' => array( 2, 6 ) ) );


タグのパラメータ

あるタグに関連付けられた投稿を表示する。

  • tag (文字列) - タグのスラッグを指定。
  • tag_id (整数) - タグ ID を指定。
  • tag__and (配列) - タグ ID を指定。
  • tag__in (配列) - タグ ID を指定。
  • tag__not_in (配列) - タグ ID を指定。
  • tag_slug__and (配列) - タグのスラッグを指定。
  • tag_slug__in (配列) - タグのスラッグを指定。


1つのタグの記事を表示

タグのスラッグを使って、このタグを持つ記事を表示:

$query = new WP_Query( 'tag=cooking' );

タグのIDを使って、このタグを持つ記事を表示:

$query = new WP_Query( 'tag_id=13' );

複数のタグから記事を表示

これらのいずれかのタグを持つ記事を表示:

$query = new WP_Query( 'tag=bread,baking' );

これらのすべてのタグを持つ記事を表示:

$query = new WP_Query( 'tag=bread+baking+recipe' );

複数タグの扱い

タグID 37 と 47 の両方にタグ付けられた記事を表示:

$query = new WP_Query( array( 'tag__in' => array( 37, 47 ) ) );

タグID 37 と 47 いずれかの記事を表示するには、前述の tag か、もしくは tag__in を使って明示的に特定することで実現します:

$query = new WP_Query( array( 'tag__in' => array( 37, 47 ) ) );

タグID 37 と 47 、2つのタグのいずれも持たない記事を表示:

$query = new WP_Query( array( 'tag__not_in' => array( 37, 47 ) ) );

tag_slug__intag_slug__and は、タグのスラッグを対象とすることを除いて、それぞれ tag__intag__and とほぼ同様に動作します。


タクソノミーのパラメータ

あるタクソノミーに関連付けられた投稿を表示する。

  • {tax} (文字列) - タクソノミーのスラッグを使用します。注:バージョン3.1以降は非推奨になりましたので、代わりに 'tax_query' を使用してください。
  • tax_query (配列) - タクソノミーパラメータを使用(バージョン3.1から利用可能)。
    • relation (文字列) - 2つ以上のタクソノミー検索条件(内側の配列)が含まれる場合に、それらの論理的な関係を指定します。有効な値は 'AND' または 'OR' です。1つしかタクソノミー検索条件を含まない場合は指定しないでください。デフォルトは 'AND' です。
    • taxonomy (文字列) - タクソノミー。
    • field (文字列) - タクソノミータームの種類を選択します。有効な値は 'term_id'(デフォルト)、'name'、'slug' または 'term_taxonomy_id' です。
    • terms (整数/文字列/配列) - タクソノミーターム。
    • include_children (真偽値) - 階層を持つタクソノミーの場合に子孫タクソノミーを含めるかどうか。デフォルトは true(含める)です。
    • operator (文字列) - 演算子。使用可能な値は 'IN'(デフォルト), 'NOT IN', 'AND', 'EXISTS' (4.1.0以降) と 'NOT EXISTS'(4.1.0以降) です。

重要な参考ポイント: tax_query は、タクソノミー検索条件(配列)の配列 をパラメータにします(つまり配列の配列です)。 下記の2番目の例を見るとわかりやすいでしょう。この構造によって、複数のタクソノミーを検索できますが、その時は最初の(外側の)配列の relation パラメータによって複数のタクソノミー検索の関係を指定します。


シンプルなカスタム分類のクエリ:

カスタム分類 peoplebob に関連付けられた投稿(post)を表示します :

$args = array(
	'post_type' => 'post',
	'tax_query' => array(
		array(
			'taxonomy' => 'people',
			'field'    => 'slug',
			'terms'    => 'bob',
		),
	),
);
$query = new WP_Query( $args );

複数のカスタム分類の取り扱い:

いくつかのカスタム分類から投稿を表示します:

$args = array(
	'post_type' => 'post',
	'tax_query' => array(
		'relation' => 'AND',
		array(
			'taxonomy' => 'movie_genre',
			'field'    => 'slug',
			'terms'    => array( 'action', 'comedy' ),
		),
		array(
			'taxonomy' => 'actor',
			'field'    => 'term_id',
			'terms'    => array( 103, 115, 206 ),
			'operator' => 'NOT IN',
		),
	),
);
$query = new WP_Query( $args );

カテゴリー quotes に所属するか投稿フォーマットquote の投稿(post)を表示します:

$args = array(
	'post_type' => 'post',
	'tax_query' => array(
		'relation' => 'OR',
		array(
			'taxonomy' => 'category',
			'field'    => 'slug',
			'terms'    => array( 'quotes' ),
		),
		array(
			'taxonomy' => 'post_format',
			'field'    => 'slug',
			'terms'    => array( 'post-format-quote' ),
		),
	),
);
$query = new WP_Query( $args );

カスタム分類の取扱いを入れ子で指定:

バージョン 4.1 以降、より複雑なクエリを作成するために 'tax_query' 句を入れ子にすることができます。

例: カテゴリー quotes に所属する、もしくは投稿フォーマットが quote かつカテゴリー wisdom に所属する投稿を表示:

$args = array(
	'post_type' => 'post',
	'tax_query' => array(
		'relation' => 'OR',
		array(
			'taxonomy' => 'category',
			'field'    => 'slug',
			'terms'    => array( 'quotes' ),
		),
		array(
                        'relation' => 'AND',
                        array(
			        'taxonomy' => 'post_format',
			        'field'    => 'slug',
			        'terms'    => array( 'post-format-quote' ),
                        ),
                        array(
                                'taxonomy' => 'category',
                                'field'    => 'slug',
                                'terms'    => array( 'wisdom' ),
                        ),
		),
	),
);
$query = new WP_Query( $args );


検索パラメータ

キーワード検索によって投稿を表示します。

  • s (文字列) - 検索するキーワード。


キーワード検索によって投稿を表示

「キーワード」という検索語にマッチする投稿を表示します:

$query = new WP_Query( array( 's' => 'キーワード' ) );

ハイフンを前置した言葉を与えると、その言葉にマッチした投稿を除外します。例えば 'pillow -sofa' は 'pillow' を含むが 'sofa' を含まない投稿を返します(バージョン4.4以降)。


投稿と固定ページのパラメータ

投稿および固定ページに基づいてコンテンツを表示する。

  • p (整数) - 投稿の ID を使用する。デフォルトの投稿タイプは post です。
  • name (文字列) - 投稿のスラッグを使用する。
  • title (文字列) - 投稿のタイトルを使用する。(バージョン4.4以降)
  • page_id (整数) - 固定ページの ID を使用する。
  • pagename (文字列) - 固定ページのスラッグを使用する。
  • post_parent (整数) - 固定ページの ID を使用する。子ページを返す。
  • post_parent__in (配列) - 投稿の ID を使用する。親の ID が配列内にある投稿を返す。(バージョン3.6以降)
  • post_parent__not_in (配列) - 投稿の ID を使用する。親の ID が配列内にない投稿を返す。(バージョン3.6以降)
  • post__in (配列) - 投稿の ID を使用する。取得するために投稿を指定する。注意: 先頭固定表示の投稿がある場合、欲しいかどうかに関係なくその投稿も取得されます(先頭に!)。この動作を避けるには ignore_sticky_posts を使ってください。
  • post__not_in (配列) - 投稿の ID を使用する。指定された投稿は取得されない。同じクエリで post__in と共に使うと、これは無視される。
  • post_name__in (配列) - 投稿のスラッグを使う。(バージョン4.4以降)

参考: Ticket #28099 post__in に空の配列を渡すと、has_posts() が true になります(すべての投稿が返されます)。post__in へ渡す配列が空のとき WP_Query を使う必要があるかどうかの判定処理を導入すると良いでしょう。

IDで投稿/ページを表示

投稿のIDを指定して表示する:

$query = new WP_Query( array( 'p' => 7 ) );
// 固定ページなら:	'page_id'=>7

参考: ID = 0 でも結果が返されるので注意しましょう。

スラッグで投稿/ページを表示

投稿のスラッグを指定して表示する:

$query = new WP_Query( 'name=about-my-life' );
// 固定ページなら:	'pagename'=>'about-my-life'

子投稿/子ページを表示

スラッシュで区切られた親ページと子ページのスラッグを使って子ページを表示する(例: 'parent_slug/child_slug'):

$query = new WP_Query( 'pagename=contact_us/canada' );

親ページの ID を使って子ページを表示する:

$query = new WP_Query( array( 'post_parent' => 93 ) );

子ページは除外し、トップレベルのページのみ表示する:

$query = new WP_Query( array( 'post_parent' => 0 ) );

配列中の ID で示されたページを親に持つ投稿を表示する:

$query = new WP_Query( array( 'post_parent__in' => array( 2, 5, 12, 14, 20 ) ) );

複数の投稿/ページを操作

指定された投稿のみ表示:

$query = new WP_Query( array( 'post__in' => array( 2, 5, 12, 14, 20 ) ) );

指定された以外の全ての投稿を表示:

$query = new WP_Query( array( 'post__not_in' => array( 2, 5, 12, 14, 20 ) ) );

注意: 同じクエリ内で 'post__in''post__not_in' を同時に使うことは出来ません。

またこのとき、コンマで区切られたリストを含む文字列では正常に動かないことにも注意してください。

'post__not_in' => array( '1,2,3' )  // <--- これは動きません


パスワードのパラメータ

パスワードのパラメータを指定した場合、投稿と固定ページのパラメータで選ばれた投稿や固定ページが対象になります。デフォルトの post_type は投稿であり固定ページではないことを覚えておきましょう。

  • has_password (真偽値) - パスワードで保護された投稿を表示するには true、保護されてない投稿を表示するには false を指定します。またパスワードの有無に関わらず表示したい場合は null を指定します(デフォルト)。(バージョン 3.9 から使用可能)
  • post_password (文字列) - 特定のパスワードで保護されている投稿を表示します。(バージョン 3.9 から使用可能)


パスワード保護の有無に応じて表示する

パスワード保護された投稿のみ表示する:

$query = new WP_Query( array( 'has_password' => true ) );

パスワード保護されていない投稿のみ表示する:

$query = new WP_Query( array( 'has_password' => false ) );

パスワード保護の有無に関わらず投稿を表示する:

$query = new WP_Query( array( 'has_password' => null ) );

特定のパスワードで保護されている記事を表示

'zxcvbn' というパスワードを持つ投稿を表示する:

$query = new WP_Query( array( 'post_password' => 'zxcvbn' ) );


投稿タイプのパラメータ

ある投稿タイプに関連付けられた投稿を表示します。

  • post_type (文字列 / 配列) - 投稿を[[投稿タイプ]によって取得する。デフォルト値は 'post'。'tax_query' がクエリーにセットされている場合、デフォルト値は 'any' になります。
    • 'post' - 投稿。
    • 'page' - 固定ページ。
    • 'revision' - 履歴 (リビジョン) 。
    • 'attachment' - 添付ファイル。WP_Query のデフォルトでは 'post_status' が 'published' ですが、添付ファイルはデフォルトで 'post_status' が 'inherit' になっています。そのため 'post_status' を明示的に 'inherit' か 'any' にしなければ、どの添付ファイルも取得できません。(後に出てくる ステータスのパラメータ を見てください)
    • 'nav_menu_item' - ナビゲーションメニュー項目。
    • 'any' - リビジョンと 'exclude_from_search' が true にセットされたものを除き、すべてのタイプを含める。
    • カスタム投稿タイプ (例えば movies)


投稿タイプによる投稿の表示

固定ページのみ表示:

$query = new WP_Query( array( 'post_type' => 'page' ) );

'any'(すべての)投稿タイプを表示(リビジョンと 'exclude_from_search' が TRUE になっている投稿タイプを除くすべての投稿タイプが含まれます):

$query = new WP_Query( array( 'post_type' => 'any' ) );

カスタムポストタイプを含む複数のポストタイプを表示:

$args = array(
	'post_type' => array( 'post', 'page', 'movie', 'book' )
);
$query = new WP_Query( $args );


ステータスのパラメータ

ある投稿ステータスに関連付けられた投稿を表示します。

  • post_status (文字列 / 配列) - 投稿ステータスを指定します。 デフォルト値は 'publish' です。しかしユーザーがログイン中なら、'private' が追加されます。公開された (Public) カスタムステータスもデフォルトで含まれます。さらに管理画面のコンテキストでクエリが動作中なら(管理画面または AJAX 呼び出し)、保護状態のステータスも追加されます。デフォルトでは保護状態のステータスは 'future', 'draft' と 'pending' です。
    • 'publish' - 公開された投稿もしくは固定ページ
    • 'pending' - レビュー待ちの投稿
    • 'draft' - 下書きの投稿
    • 'auto-draft' - コンテンツのない、新規作成された投稿
    • 'future' - 予約公開設定された投稿
    • 'private' - ログインしていないユーザーから見えない設定
    • 'inherit' - リビジョン。 get_childrenを見てください。
    • 'trash' - ゴミ箱に入った投稿。 (Version 2.9 以降で利用可能)。
    • 'any' - 'exclude_from_search' が true にセットされているもの(つまり trash と auto-draft)を除き、すべてのステータスの投稿を取得する。

ステータスによる投稿の表示

下書きのみ表示:

$query = new WP_Query( array( 'post_status' => 'draft' ) );

複数の投稿のステータスを表示:

$args = array(
	'post_status' => array( 'pending', 'draft', 'future' )
);
$query = new WP_Query( $args );

すべての添付ファイルを表示:

$args = array(
	'post_status' => 'any',
	'post_type'   => 'attachment'
);
$query = new WP_Query( $args );

コメントパラメータ

バージョン4.9以降、comment_count パラメータを導入しました。

  • comment_count (整数) - 投稿のコメント数(比較演算子は '=' が使われる)
  • comment_count (配列) -
    • value (整数) - 投稿のコメント数と比較する数。
    • compare (文字列) - 比較演算子。可能な値は '=', '!=', '>', '>=', '<', '<=' です。デフォルトは '=' です。

簡単なコメント数のクエリ:

コメント数が20投稿を表示する:

$args = array(
	'post_type' => 'post',
	'comment_count' => 20,
	)
);
$query = new WP_Query( $args );


高度なコメント数のクエリ:

コメント数が25以上の投稿を表示する:

$args = array(
	'post_type' => 'post',
	'comment_count' => array(
		array(
			'value' => 25,
			'compare' => '>=',
		),
	)
);
$query = new WP_Query( $args );

ページ送りパラメータ

  • nopaging (真偽値) - すべての投稿を含めるか、ページ送りに対応させます。デフォルト値は false で、ページ送りに対応します。
  • posts_per_page (整数) - 1ページに含める投稿数(バージョン 2.1 以降で使えます。非推奨になった showposts パラメータを置き換えます)。'posts_per_page'=>-1 を使用するとすべての投稿を含めます(このとき 'offset' パラメータは無視されます)。ページ送りを使用するにはこのパラメータと一緒に 'paged' パラメータを指定してください。参考:フィードでのクエリの場合、WordPress はオプション 'posts_per_rss'(RSS/Atom フィードで表示する最新の投稿数)の値でこのパラメータを上書きします。それでも投稿数を設定するには 'post_limits' フィルターを使うか、'pre_option_posts_per_rss' フィルターで -1 を返してください。
  • posts_per_archive_page (整数) - 1ページに含める投稿数ですが、アーカイブページ専用です。is_archive()is_search() が true になるページでは、posts_per_pageshowposts の値を上書きします。
  • offset (整数) - ずらす(または読み飛ばす)投稿の数。注意offset パラメータをセットすると paged パラメータを無視します。そのためページ送りされません(ワークアラウンドを見るにはここをクリック /en)。反対に 'offset' パラメータは 'posts_per_page'=>-1 が使われると(すべての投稿を表示)無視されます。
  • paged (整数) - ページ番号。「前の投稿」リンクを使った場合にふつうページ X に表示されるであろう投稿を含めます。
  • page (整数) - 静的フロントページ用のページ番号。静的フロントページのページ X に表示されるであろう投稿を表示します。
  • ignore_sticky_posts (真偽値) - 先頭固定表示の投稿を無視します(バージョン 3.1 以降で使えます。非推奨になった caller_get_posts パラメータを置き換えます)。デフォルトは false で、無視しません(先頭に含めます)。true にすると無視します。なお、先頭固定表示の投稿を無視(除外)しても先頭に出てこないだけで、投稿リストにそれらの投稿が本来並ぶべき位置には出てきます。

ページあたり x 件の投稿を表示

$query = new WP_Query( array( 'posts_per_page' => 3 ) );	// ページあたり3件の投稿を表示
$query = new WP_Query( array( 'posts_per_page' => -1 ) );	// 1つのページに全ての投稿を表示

ページネーションを無効にして全ての投稿を表示する:

$query = new WP_Query( array( 'nopaging' => true ) );

投稿を読み飛ばす

4番目の投稿から表示する:

$query = new WP_Query( array( 'offset' => 3 ) );

最新から3つを飛ばして5件の投稿を表示:

$query = new WP_Query( array( 'posts_per_page' => 5, 'offset' => 3 ) );

xページから投稿を表示

$query = new WP_Query( array( 'paged' => 6 ) );	// ページ番号6の記事を表示

現在のページから投稿を表示

$query = new WP_Query( array( 'paged' => get_query_var( 'paged' ) ) );

現在のページから投稿を表示するが、もしクエリ変数がセットされていなければ(先頭ページなら)'page' パラメータに 1 をセットする。

$paged = ( get_query_var('paged') ) ? get_query_var('paged') : 1;
$query = new WP_Query( array( 'paged' => $paged ) );

ページネーションの参考:静的フロントページに指定したページテンプレートにおいて、クエリをページ送りに対応させるには get_query_var( 'page' ); を使ってください。さらにクエリ変数 'page' は、<!--nextpage--> クイックタグ をコンテンツに含んでおりページ分割された単一の投稿または固定ページについて、ページ番号を保持します。

静的フロントページの現在のページから投稿を表示する:

$paged = ( get_query_var('page') ) ? get_query_var('page') : 1;
$query = new WP_Query( array( 'paged' => $paged ) );

先頭固定表示の投稿を含める

先頭固定表示の投稿のうち最初のひとつを取得します:

$sticky = get_option( 'sticky_posts' );
$query = new WP_Query( array( 'p' => $sticky[0] ) );

最初の先頭固定表示の投稿を取得しますが、もしなければ最新の投稿を取得します:

$sticky = get_option( 'sticky_posts' );
$args = array(
	'posts_per_page'      => 1,
	'post__in'            => $sticky,
	'ignore_sticky_posts' => 1,
);
$query = new WP_Query( $args );

最初の先頭固定表示の投稿を取得する(最新の投稿を除く)には、次のコードを上記のコードに続けてください:

if ( $sticky[0] ) {
	// insert here your stuff...
}

先頭固定表示の投稿を無視する

クエリからすべての先頭固定表示の投稿を除外します:

$query = new WP_Query( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );

カテゴリー内のすべての投稿を取得しますが、先頭固定表示の投稿を先頭に入れません(ignore)。ただし本来出てくるべき位置(例:日付順)には先頭固定表示の投稿が含まれます:

$query = new WP_Query( array( 'ignore_sticky_posts' => 1, 'posts_per_page' => 3, 'cat' => 6 );

あるカテゴリーから先頭固定表示の投稿を無視して取得します。カテゴリー内の投稿を取得しますが、先頭固定表示の投稿を完全に除外します。さらにページングに対応させます:

$paged = get_query_var( 'paged' ) ? get_query_var( 'paged' ) : 1;
$sticky = get_option( 'sticky_posts' );
$args = array(
	'cat'                 => 3,
	'ignore_sticky_posts' => 1,
	'post__not_in'        => $sticky,
	'paged'               => $paged,
);
$query = new WP_Query( $args );


順序づけパラメータ

投稿の並びを指定します。

  • order (文字列 | 配列) - 'orderby' パラメータについて昇順か降順かを指定します。デフォルトは 'DESC'(降順)です。複数の order/orderby の組を配列で指定することもできます。
    • 'ASC' - 最低から最高へ昇順 (1, 2, 3; a, b, c).
    • 'DESC' - 最高から最低へ降順 (3, 2, 1; c, b, a).
  • orderby (文字列 | 配列) - パラメータで指定した項目の値で投稿をソートする。デフォルトは 'date' (post_date) です。2つ以上のオプションを含めることもできます。
    • 'none' - 順序をつけない(バージョン 2.8 以降で使用可能)。
    • 'ID' - 投稿 ID で並び替える。大文字に注意。
    • 'author' - 著者で並び替える。('post_author' でも良い。)
    • 'title' - タイトルで並び替える。('post_title' でも良い。)
    • 'name' - スラッグで並び替える。('post_name' でも良い。)
    • 'type' - 投稿タイプで並び替える。('post_type' でも良い。)
    • 'date' - 日付で並び替える。('post_date' でも良い。)
    • 'modified' - 更新日で並び替える。('post_modified' でも良い。)
    • 'parent' - 投稿/固定ページの親 ID 順。('post_parent' でも良い。)
    • 'rand' - ランダムで並び替える。'RAND(x)' も使えます('x' はシードになる整数)。
    • 'comment_count' - コメント数で並び替える(バージョン 2.9 以降で使用可能)。
    • 'relevance' - 文字列検索のとき次の順で並び替える: 1. 文字列全体がマッチ。 2. すべての単語がタイトルに含まれる。 3. いずれかの単語がタイトルに現れる。 4. 文字列全体が post_content に現れる。
    • 'menu_order' - 固定ページの表示順で並び替える。固定ページ(固定ページ編集画面のページ属性ボックス)と添付ファイル(ギャラリー内のメディアの順番に相当)で使うことが最も多いでしょう。しかしバラバラの値が入った 'menu_order' を持つ任意の投稿タイプに対して使うことができます(デフォルト値は 0)。
    • 'meta_value' - カスタムフィールドで並び替える。'meta_key=keyname' がクエリに存在しなければいけません。また、ソート順は文字列順になることに注意して下さい。数値だと予想外の挙動をします(通常、1, 3, 4, 6, 34, 56となると思うところが、1, 3, 34, 4, 56, 6となります)。数値なら代わりに 'meta_value_num' を使ってください。カスタムフィールドの値を特定の型にキャストしたければ 'meta_type' を指定できます。有効な値は 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED' です('meta_query' と同じ)。'meta_type' を使うとき、それに応じて 'meta_value_*' も使えます。例えば 'meta_type' に DATETIME を指定するとき、ソート順の定義に 'meta_value_datetime' を使えます。
    • 'meta_value_num' - カスタムフィールドの値を数値として並び替える。(バージョン 2.8 以降で使用可能)。これもまた、'meta_key=keyname'がクエリに存在しなければならないことに注意して下さい。こちらは 'meta_value' 示したような数値での並べ替えを可能にします。
    • 'post__in' - post__in パラメータの配列に並んだ投稿 ID の順になります(バージョン 3.5 以降で利用可能)。
    • 'post_name__in' - 'post_name__in' パラメータの配列に並んだ投稿スラッグの順になります(バージョン 4.6 以降で利用可能)。参考: このとき order パラメータの値はソート順を変えません。
    • 'post_parent__in' - 'post_parent__in' パラメータの配列に並んだ親投稿 ID の順になります(バージョン 4.6 以降で利用可能)。参考: このとき order パラメータの値はソート順を変えません。

タイトルで投稿をソート表示、降順

投稿をその 'title' で降順に並べ替えて表示します:

$args = array(
	'orderby' => 'title',
	'order'   => 'DESC',
);
$query = new WP_Query( $args );

投稿を 'menu_order' の降順でソートして表示します。同じ値なら投稿の 'title' の順にします:

$args = array(
	'orderby' => 'menu_order title',
	'order'   => 'DESC',
);
$query = new WP_Query( $args );

ランダムに投稿を表示

ランダムに投稿を1件表示する:

$args = array(
	'orderby'        => 'rand',
	'posts_per_page' => '1',

);
$query = new WP_Query( $args );

人気の投稿を表示

投稿をコメント数の順に表示する:

$args = array(
	'orderby' => 'comment_count'
);
$query = new WP_Query( $args );

値段順にソートした商品を表示

'Product' 投稿タイプをカスタムフィールド 'Price' で並び替えて表示:

$args = array(
	'post_type' => 'product',
	'orderby'   => 'meta_value_num',
	'meta_key'  => 'price',
);
$query = new WP_Query( $args );

複数の値を 'orderby' に指定

固定ページを 'title' と 'menu_order' で並び替えて表示(タイトルが優先):

$args = array(
	'post_type' => 'page',
	'orderby'   => 'title menu_order',
	'order'     => 'ASC',
);
$query = new WP_Query( $args );

配列を使って複数の値を 'orderby' に指定

別々の表示順(昇順/降順)の 'title' と 'menu_order' で並べ替えた固定ページを表示(バージョン 4.0 から利用可能):

$args = array(
	'orderby' => array( 'title' => 'DESC', 'menu_order' => 'ASC' )
);
$query = new WP_Query( $args );

複数の orderby とソート項目のペア

$args = array(
	'orderby'  => array( 'meta_value_num' => 'DESC', 'title' => 'ASC' ),
	'meta_key' => 'age'
);
$query = new WP_Query( $args );

カスタムフィールドとカスタム投稿タイプを 'orderby' に指定

投稿タイプが 'my_custom_post_type' で 'age' 順、そして 'age' が3か4のものだけを表示(meta_query を使用)。

$args = array(
	'post_type'  => 'my_custom_post_type',
	'meta_key'   => 'age',
	'orderby'    => 'meta_value_num',
	'order'      => 'ASC',
	'meta_query' => array(
		array(
			'key'     => 'age',
			'value'   => array( 3, 4 ),
			'compare' => 'IN',
		),
	),
);
$query = new WP_Query( $args );

複数の meta_key を伴う orderby の指定

投稿メタの異なる2項目を使って並び替えたいとき(例: まず City で次に State)、メタクエリを合体させて orderby へ関連づける必要があります。そのとき「名前付きメタクエリ」を使います。次の例を見てください:

$q = new WP_Query( array(
    'meta_query' => array(
        'relation' => 'AND',
        'state_clause' => array(
            'key' => 'state',
            'value' => 'Wisconsin',
        ),
        'city_clause' => array(
            'key' => 'city',
            'compare' => 'EXISTS',
        ), 
    ),
    'orderby' => array( 
        'city_clause' => 'ASC',
        'state_clause' => 'DESC',
    ),
) );

上のコードは WPSE の cybmeta による この例 から引用しました。


日付パラメータ

ある期間に関連付けられた投稿を表示する。

  • year (整数) - 4桁の年 (例: 2011)。
  • monthnum (整数) - 月 (1 から 12)。
  • w (整数) - 週の番号 (0 から 53)。MySQL の WEEK コマンド を使用。このモードは "start_of_week" オプションに依存します。
  • day (整数) - 日 (1 から 31)。
  • hour (整数) - 時 (0 から 23)。
  • minute (整数) - 分 (0 から 60)。
  • second (整数) - 秒 (0 から 60)。
  • m (整数) - 年と月 (例えば: 201307)。
  • date_query (配列) - 複雑な指定ができる日付パラメータ (バージョン 3.7 から利用可能)。
    • year (整数) - 4桁の年 (例: 2011)。
    • monthnum (整数) - 月 (1 から 12)。
    • w (整数) - 週の番号 (0 から 53)。
    • day (整数) - 日 (1 から 31)。
    • hour (整数) - 時 (0 から 23)。
    • minute (整数) - 分 (0 から 60)。
    • second (整数) - 秒 (0 から 60)。
    • after (文字列/配列) - この日付より後の投稿を取得。strtotime() 互換の文字列、または 'year', 'month', 'day' の値を持つ配列を指定可能:
      • year ('文字列) 4桁の年。デフォルトは空文字列。
      • month (文字列) 月 (1 から 12)。デフォルトは12。
      • day (文字列) 日 (1 から 31)。デフォルトは月の最終日。
    • before (文字列/配列) - この日付より前の投稿を取得。strtotime() 互換の文字列、または 'year', 'month', 'day' の値を持つ配列を指定可能:
      • year (文字列) 4桁の年。デフォルトは空文字列。
      • month (文字列) 月 (1 から 12)。デフォルトは1。
      • day (文字列) 日 (1 から 31)。デフォルトは1。
    • inclusive (真偽値) - afterbefore について、指定された日付ぴったりを含めるかどうか。
    • compare (文字列) - WP_Date_Query::get_compare() を見てください。
    • column (文字列) - クエリ対象とする(wp_posts テーブルの)カラム。デフォルトは 'post_date'。
    • relation (文字列) - OR または AND。子の配列をどのように結合して比較するか。デフォルトは AND。


2012年12月12日の投稿を返す:

$query = new WP_Query( 'year=2012&monthnum=12&day=12' );

または:

$args = array(
	'date_query' => array(
		array(
			'year'  => 2012,
			'month' => 12,
			'day'   => 12,
		),
	),
);
$query = new WP_Query( $args );

今日の投稿を返す:

$today = getdate();
$query = new WP_Query( 'year=' . $today['year'] . '&monthnum=' . $today['mon'] . '&day=' . $today['mday'] );

または:

$today = getdate();
$args = array(
	'date_query' => array(
		array(
			'year'  => $today['year'],
			'month' => $today['mon'],
			'day'   => $today['mday'],
		),
	),
);
$query = new WP_Query( $args );

今週の投稿を返す:

$week = date( 'W' );
$year = date( 'Y' );
$query = new WP_Query( 'year=' . $year . '&w=' . $week );

または:

$args = array(
	'date_query' => array(
		array(
			'year' => date( 'Y' ),
			'week' => date( 'W' ),
		),
	),
);
$query = new WP_Query( $args );

平日の午前9時から午後5時までの投稿を返す

$args = array(
	'date_query' => array(
		array(
			'hour'      => 9,
			'compare'   => '>=',
		),
		array(
			'hour'      => 17,
			'compare'   => '<=',
		),
		array(
			'dayofweek' => array( 2, 6 ),
			'compare'   => 'BETWEEN',
		),
	),
	'posts_per_page' => -1,
);
$query = new WP_Query( $args );

1月1日から2月28日までの投稿を返す

$args = array(
	'date_query' => array(
		array(
			'after'     => 'January 1st, 2013',
			'before'    => array(
				'year'  => 2013,
				'month' => 2,
				'day'   => 28,
			),
			'inclusive' => true,
		),
	),
	'posts_per_page' => -1,
);
$query = new WP_Query( $args );

注意:before パラメータに strtotime() 互換の文字列として日付だけを指定すると、その日の 00:00:00 に変換されます。この場合、inclusive が true でも、指定した日はクエリ結果に含まれません。before に指定した日を含めたければ、'before' => '2013-02-28 23:59:59' のように時刻も含めるか、または配列形式(inclusive をセットすると自動調整される)を使ってください。

1年より前の投稿で1ヶ月以内に変更されたものを返す

$args = array(
	'date_query' => array(
		array(
			'column' => 'post_date_gmt',
			'before' => '1 year ago',
		),
		array(
			'column' => 'post_modified_gmt',
			'after'  => '1 month ago',
		),
	),
	'posts_per_page' => -1,
);
$query = new WP_Query( $args );

'date_query' 句を入れ子にして複雑なクエリを指定できます。構文について詳しくは タクソノミーのパラメータ を見てください。


カスタムフィールドのパラメータ

あるカスタムフィールドに関連付けられた投稿を表示します。

クエリのこの部分は WP_Meta_Query /en でパースされます。ここに示したリストは古くなるかもしれないので WP_Meta_Query の引数の説明 /en も見てください。

  • meta_key (文字列) - カスタムフィールドのキー。
  • meta_value (文字列) - カスタムフィールドの値(文字列として比較)。
  • meta_value_num (数値) - カスタムフィールドの値(数値として比較)。
  • meta_compare (文字列) -'meta_value'のテスト演算子。 使える値は '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'NOT EXISTS', 'REGEXP', 'NOT REGEXP' および 'RLIKE' です。デフォルトは '=' です。
  • meta_query (配列) - カスタムフィールドの複雑なパラメータ (バージョン 3.1 より利用可能)。
    • relation (文字列) - meta_query の中に2つ以上の配列を入れたときの論理的な関係。使える値は 'AND' と 'OR' です(デフォルト: 'AND')。ひとつだけ配列を入れるときは使わないでください。

meta_query には次のキーを持った配列をひとつまたは複数入れることができます:

  • key (文字列) - カスタムフィールドのキー。
  • value (文字列|配列) - カスタムフィールドの値。配列を指定できるのは compare'IN', 'NOT IN', 'BETWEEN' または 'NOT BETWEEN' の場合です。WordPress 3.9 以上で compare'EXISTS' または 'NOT EXISTS' を指定する場合は value を省略できます。
    (参考: bug #23268 の影響で、バージョン 3.9 より前では NOT EXISTS による比較を正しく動作させるために value が必要です。value パラメータに何らかの文字列を与えなければなりません。空文字列や NULL では動作しません。しかし他のどんな文字列でもトリックが効き、NOT EXISTS を使ったときに SQL に現れません。ピンとこなければ 'bug #23268' を見てみては?)。
  • compare (文字列) - テスト演算子。使える値は '=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' および 'NOT EXISTS' です。デフォルトは '=' です。
  • type (文字列) - カスタムフィールドの値のタイプ。使える値は 'NUMERIC', 'BINARY', 'CHAR', 'DATE', 'DATETIME', 'DECIMAL', 'SIGNED', 'TIME', 'UNSIGNED' です。デフォルトは 'CHAR' です。'DECIMAL' と 'NUMERIC' には有効桁数と小数点以下の桁数を指定できます(例: 'DECIMAL(10,5)' や 'NUMERIC(10)' が有効)。

'type' を DATE、'compare' を BETWEEN にして正しく比較できるのは、日付が YYYY-MM-DD 形式で保存されていて同じ形式の日付と比較する場合のみです。

重要な参考ポイント: meta_query はカスタムフィールド検索条件(配列)の配列 をパラメータにします(つまり配列の配列です)。次の例に出てきます。 この構造によって複数のカスタムフィールドを検索できますが、その時は最初の(外側の)配列の relation パラメータによって複数のカスタムフィールド検索の関係を指定します。使える値は 'AND' と 'OR' です。デフォルト 'AND' です。


簡単なカスタムフィールドクエリ:

カスタムフィールドの値に関係なく、カスタムフィールドのキーが 'color' の投稿を表示します:

$query = new WP_Query( array( 'meta_key' => 'color' ) );

カスタムフィールドのキーに関係なく、カスタムフィールドの値が 'blue' の投稿を表示します:

$query = new WP_Query( array( 'meta_value' => 'blue' ) );

カスタムフィールドのキーに関係なく、カスタムフィールドの値が 'blue' の固定ページを表示します:

$args = array(
	'meta_value' => 'blue',
	'post_type'  => 'page'
);
$query = new WP_Query( $args );

カスタムフィールドのキーが 'color'、値が 'blue' の投稿を表示します:

$args = array(
	'meta_key'   => 'color',
	'meta_value' => 'blue'
);
$query = new WP_Query( $args );

カスタムフィールドのキーが 'color'、値が 'blue' ではない投稿を表示します:

$args = array(
	'meta_key'     => 'color',
	'meta_value'   => 'blue',
	'meta_compare' => '!='
);
$query = new WP_Query( $args );

カスタムフィールドの値が数値である投稿を表示する例です。その数値が10未満の投稿だけを表示します。(WP_Query は比較に次の式を使います: $post_meta . $args['meta_compare'] . $args['meta_value'] - ここで '$post_meta' は各投稿に保存されている投稿メタの値です。値を置換した後の実際の式は: $post_meta < 10

$args = array(
	'post_type' => 'post',
	'meta_key' => 'number',
	'meta_value_num' => 10,
	'meta_compare' => '<',
);
$query = new WP_Query( $args );

イベントの投稿('event' カスタム投稿タイプ)を表示します。開催日のカスタムフィールドのキーが 'event_date'、値が今日以降とします。

$args = array(
	'post_type'    => 'event',
	'meta_key'     => 'event_date',
	'meta_value'   => date( "Ymd" ), // 'event_date' の保存形式に合わせる
	'meta_compare' => '>',
);
$query = new WP_Query( $args );

製品('product' カスタム投稿タイプ)のうち、値段('price' カスタムフィールド)が 22 以下 であるものを表示します。
値を指定するのに 'meta_value' パラメータを使うと 99 が 100 より大きいと判定されます(数値ではなく文字列として保存されているため)。

$args = array(
	'meta_key'         => 'price',
	'meta_value_num'   => '22',
	'meta_compare'     => '<=',
	'post_type'        => 'product'
);
$query = new WP_Query( $args );

カスタムフィールドのキーに関係なく、値がゼロ (0) のカスタムフィールドを持つ投稿を表示します:

$args = array(
	'meta_value' => '_wp_zero_value'
);
$query = new WP_Query( $args );

単一のカスタムフィールドの取扱い:

1つのカスタムフィールドからの記事を表示します:

$args = array(
	'post_type' => 'product',
	'meta_query' => array(
		array(
			'key' => 'color',
			'value' => 'blue',
			'compare' => 'NOT LIKE'
		)
	)
 );
$query = new WP_Query( $args );

(meta_query はクエリがひとつだけでも入れ子の配列を指定しなければなりません。)

複数のカスタムフィールドの取扱い:

製品(カスタム投稿タイプ 'product')について、色(カスタムフィールドのキー 'color')が青('blue')ではない('NOTE LIKE')か、または値段(キー 'price'、タイプ 'numeric')が20と100の間にある('BETWEEN')ものを表示します。

$args = array(
	'post_type'  => 'product',
	'meta_query' => array(
		'relation' => 'OR',
		array(
			'key'     => 'color',
			'value'   => 'blue',
			'compare' => 'NOT LIKE',
		),
		array(
			'key'     => 'price',
			'value'   => array( 20, 100 ),
			'type'    => 'numeric',
			'compare' => 'BETWEEN',
		),
	),
);
$query = new WP_Query( $args );

'meta_query' 句は複雑なクエリが作れるように入れ子にできます。例えば製品('product')の中でオレンジ色('color=orange')または('OR')赤でサイズが小さい('color=red&size=small')のものを表示するのは、次のようなクエリに変換できます:

$args = array(
	'post_type'  => 'product',
	'meta_query' => array(
		'relation' => 'OR',
		array(
			'key'     => 'color',
			'value'   => 'orange',
			'compare' => '=',
		),
                array(
                        'relation' => 'AND',
                        array(
                                'key' => 'color',
                                'value' => 'red',
                                'compare' => '=',
                        ),
                        array(
                                'key' => 'size',
                                'value' => 'small',
                                'compare' => '=',
                        ),
		),
	),
);
$query = new WP_Query( $args );


権限パラメータ

  • perm (文字列) - ユーザー権限。

ユーザーが適切な権限を持つ場合に投稿を表示

ユーザーが適切な権限を持つ場合に、公開済みと非公開の投稿を表示します:

$args = array(
	'post_status' => array( 'publish', 'private' ),
	'perm'        => 'readable',
);
$query = new WP_Query( $args );


MIME タイプのパラメータ

添付ファイル(attachments)投稿タイプと共に使ってください。

  • post_mime_type (文字列/配列) - この MIME タイプに限定。

gif 画像の添付ファイルを取得:

gif 画像を取得します。添付ファイルのデフォルトの投稿ステータスが inherit であることに注意してください。

$args = array(
	'post_type'	 => 'attachment',
	'post_status'	 => 'inherit',
	'post_mime_type' => 'image/gif',
);
$query = new WP_Query( $args );

画像ではない添付ファイルを取得:

特定の MIME タイプを除外するには、まず get_allowed_mime_types() を使ってすべての MIME タイプを取得します。そして array_diff() を使って除外する MIME タイプとの差を求め、それを指定します。

$unsupported_mimes  = array( 'image/jpeg', 'image/gif', 'image/png', 'image/bmp', 'image/tiff', 'image/x-icon' );
$all_mimes          = get_allowed_mime_types();
$accepted_mimes     = array_diff( $all_mimes, $unsupported_mimes );
$args		    = array(
    'post_type'         => 'attachment',
    'post_status'       => 'inherit',
    'post_mime_type'    => $accepted_mimes,
);
$query		    = new WP_Query( $query_args );


キャッシュのパラメータ

取得したデータがキャッシュへ追加されるのを禁止します。

  • cache_results (真偽値) - 投稿情報のキャッシュ。
  • update_post_meta_cache (真偽値) - 投稿のメタ情報のキャッシュ(カスタムフィールドなど)。
  • update_post_term_cache (真偽値) - 投稿のターム情報のキャッシュ(カテゴリーなど)。

投稿情報をキャッシュへ追加せずに投稿を表示

50本の投稿を表示しますが、投稿情報をキャッシュへ追加しません:

$args = array(
	'posts_per_page' => 50,
	'cache_results'  => false
);
$query = new WP_Query( $args );

投稿メタ情報をキャッシュへ追加せずに投稿を表示

50本の投稿を表示しますが、投稿メタ情報をキャッシュへ追加しません:

$args = array(
	'posts_per_page'         => 50,
	'update_post_meta_cache' => false
);
$query = new WP_Query( $args );

投稿ターム情報をキャッシュへ追加せずに投稿を表示

50本の投稿を表示しますが、投稿ターム情報をキャッシュへ追加しません:

$args = array(
	'posts_per_page'         => 50,
	'update_post_term_cache' => false
);
$query = new WP_Query( $args );

一般的な使い方ならキャッシュへ追加するのが普通なので、これらのパラメータを使う必要はないでしょう。しかし特定の状況では役に立ちます。例えば投稿タイトルと URL を表示するために WP_Query を使うけれども、それ以外の情報を使わずタクソノミーとメタデータも不要な場合です。これらの情報を読み込まなければ余分な SQL クエリによる時間を節約できます。

参考: バックエンドに永続的オブジェクトキャッシュ(memcached など)が使われている場合、これらのフラグはデフォルトで false にされます。なぜなら永続的キャッシュがある時はページ読み込み毎にキャッシュを更新する必要がないからです。


戻り値パラメータ

戻り値を設定します。

  • fields (文字列) - どのフィールドを返すか。
    • 'ids' - 投稿IDの配列を返します。
    • 'id=>parent' - プロパティに ID(投稿ID)と post_parent(親のID)を持つ stdClass オブジェクトの配列を返します。
    • 他の何かを渡すと、すべてのフィールドを返します。 (デフォルト) - 投稿オブジェクトの配列。


フィルター

以下のフィルターは投稿の配列を返すクエリを対象にします:

  • posts_distinct /en - クエリの SQL 'DISTINCTROW' 節を変更。
  • posts_groupby /en - クエリの SQL 'GROUP BY' 節を変更。
  • posts_join /en - クエリの SQL 'JOIN' 節を変更。
  • post_limits /en - クエリの SQL 'LIMIT' 節を変更。
  • posts_orderby /en - クエリの SQL 'ORDER BY' 節を変更。
  • posts_where /en - クエリの SQL 'WHERE' 節を変更。
  • posts_join_paged /en - クエリの中で投稿のページネーションに用いる 'JOIN' 節を変更。
  • posts_where_paged /en - クエリの中で投稿のページネーションに用いる 'WHERE' 節を変更。
  • posts_fields - クエリの SQL 'SELECT' 節を変更。
  • posts_clauses /en - ここまでに挙げた SQL 節のすべてを一度に変更。節を要素とする配列が与えられ、変更が容易(バージョン3.1以降で使用可能)。

参考: これ以外にもフィルターがあります。この codex をいつも最新に保つのは難しいので、WP_Query クラス内の get_posts() メソッドを御自身で見てください(wp-includes/class-wp-query.php にあります)。


変更履歴

  • 4.9.0:
    • Introduced the `$comment_count` parameter.
  • 4.6.0:
    • Add filter 'posts_pre_query' to filter the posts array before the query takes place.
    • Add 'post_name__in' to '$orderby'.
  • 4.5.0:
    • Removed the '$comments_popup' property.
  • 4.4.0:
    • Add filter 'old_slug_redirect_url' to filter the old slug redirect URL.
    • Add the ability to pass a post ID to '$post' parameter of 'setup_postdata' method and function.
    • Introduced '$post_name__in' and '$title' parameters.
    • '$s' was updated to support excluded search terms, by prepending a hyphen.
  • 4.1.0:
    • Add '$this' parameter to 'the_post' action (The current Query object (passed by reference)).


ソースファイル

WP_Query()wp-includes/class-wp-query.php にあります。

外部リソース

日本語

英語

関連項目

記事

コード・ドキュメンテーション

  • クラス: WP_Query - WP_Query クラスの詳細な全容
  • クラス: WP_Comment_Query - コメント関連のクエリのためのクラス
  • クラス: WP_User_Query - ユーザー関連のクエリのためのクラス
  • オブジェクト: $wpdb - $wpdb オブジェクトの使い方全容
  • 関数: set_query_var()
  • 関数: get_query_var()
  • 関数: query_posts() - 追加のカスタムクエリを作成
  • 関数: get_post() - 項目の ID を取得しデータベース内にあるその投稿のレコードを返す
  • 関数: get_posts() - 投稿の配列を返すことに特化した関数
  • 関数: get_pages() - ページの配列を返すことに特化した関数
  • 関数: have posts() - クエリが投稿を返すか否かを判断する条件関数
  • 関数: the_post() - クエリ後に自動的にループを設定する
  • 関数: rewind_posts() - 現状のループをリセットする
  • 関数: setup_postdata() - ループ内で個別の結果を得るためのクエリデータを設定する
  • 関数: wp_reset_postdata() - 直前のクエリを復元する (通常はループ内の別のループの後に用いられる)
  • 関数: wp_reset_query()
  • 関数: is_main_query() - 変更されるクエリがメインのクエリであることを確認する
  • アクションフック: pre_get_posts - WordPressクエリが実行される前に変更する
  • アクションフック: the_post - post クエリの後で post オブジェクトを変更する
  • フィルターフック: found_posts - WP_Query オブジェクトの found_posts 値を変更する


クラスリファレンス関数リファレンスの各インデックスも参照してください。

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