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

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

「テンプレートタグ/query posts」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(和訳完了。英語版に揃えるために用例を幾つか削除したので、この次の版で戻します。)
(パラメーター: 用例を戻しました。WP_Queryと同内容であるため、テンプレート化するか、単純にリンクを張るだけにしたほうがよいと思います。従って、翻訳も途中までしかやってお)
215行目: 215行目:
 
ここでの記述例は <tt>[[関数リファレンス/WP_Query|WP_Query]]</tt> オブジェクトでも使えるものですが、もちろんこれが全てではありません。パラメーターを組み合わせることで、より実用的なクエリが可能になります。パラメーターの詳細は[[関数リファレンス/WP_Query#Parameters|こちら]]を参照してください。
 
ここでの記述例は <tt>[[関数リファレンス/WP_Query|WP_Query]]</tt> オブジェクトでも使えるものですが、もちろんこれが全てではありません。パラメーターを組み合わせることで、より実用的なクエリが可能になります。パラメーターの詳細は[[関数リファレンス/WP_Query#Parameters|こちら]]を参照してください。
  
 +
<div id="Author Parameters">
 +
=== 投稿者引数 ===
 +
</div>
 +
ある投稿者に関連付けられた投稿を表示する。
 +
 +
*  '''<tt>author</tt>''' (''整数'') - ユーザーID.
 +
*  '''<tt>author_name</tt>''' (''文字列'') - use '<tt>user_nicename</tt>' (NOT name).
 +
 +
'''ある投稿者の投稿を表示する'''
 +
 +
ユーザーIDを用いて投稿者を特定する場合:
 +
 +
query_posts( 'author=123' );
 +
 +
'<tt>user_nicename</tt>' (ユーザー名ではない名前) を用いて投稿者を特定する場合:
 +
 +
query_posts( 'author_name=rami' );
 +
 +
'''複数投稿者の投稿を表示する'''
 +
 +
複数の投稿者の投稿を表示する場合:
 +
 +
query_posts( 'author=2,6,17,38' );
 +
 +
'''ある投稿者の投稿を表示しない'''
 +
 +
特定の投稿者「以外」の投稿を全て表示させる場合は、IDの前に <tt>'-' (マイナス)</tt> をつけます:
 +
 +
query_posts( 'author=-123' );
 +
 +
<div id="Category_Parameters">
 +
=== カテゴリー引数 ===
 +
</div>
 +
指定したカテゴリーに分類された投稿を表示する。
 +
 +
* '''<tt>cat</tt>''' (整数)- カテゴリー ID。
 +
* '''<tt>category_name</tt>''' (文字列)- カテゴリースラッグを指定(カテゴリー名ではない)。
 +
* '''<tt>category__and</tt>''' (配列)- カテゴリー ID の配列。指定した複数のカテゴリーすべてに含まれる投稿のみを表示。
 +
* '''<tt>category__in</tt>''' (配列)- カテゴリー ID の配列。指定した複数のカテゴリーいずれかに含まれる投稿のみを表示。
 +
* '''<tt>category__not_in</tt>''' (配列)- カテゴリー ID の配列。指定した複数のカテゴリーのいずれにもに含まれない投稿のみを表示。
 +
 +
'''ひとつのカテゴリーの投稿を表示'''
 +
 +
ID で指定したカテゴリー(とその子孫カテゴリー)に含まれる投稿のみを表示。
 +
 +
query_posts( 'cat=4' );
 +
 +
カテゴリースラッグで指定したカテゴリー(とその子孫カテゴリー)に含まれる投稿のみを表示。
 +
 +
query_posts( 'category_name=staff' );
 +
 +
'''複数のカテゴリーの投稿を表示'''
 +
 +
ID で指定した複数のカテゴリーに含まれる投稿のみを表示。
 +
 +
query_posts( 'cat=2,6,17,38' );
 +
 +
スラッグで指定した複数のカテゴリーに含まれる投稿のみを表示。
 +
 +
query_posts( 'category_name=staff,news' );
 +
 +
'''指定カテゴリーの投稿を除外'''
 +
 +
'-'(マイナス)記号を前につけたカテゴリー ID '以外' の投稿を表示。
 +
 +
query_posts( 'cat=-3' );
 +
 +
'''複数カテゴリーの指定方法'''
 +
 +
ID で指定した複数のカテゴリーすべてに含まれるカテゴリーを表示。以下はカテゴリー ID 2 と 6 の両方に含まれる投稿を表示。
 +
 +
query_posts( array( 'category__and' => array( 2, 6 ) ) );
 +
 +
カテゴリー ID 2 または 6 に含まれる投稿を表示するには、前述の cat か category__in(こちらは子孫カテゴリーを含みません)を使う。
 +
 +
query_posts( array( 'category__in' => array( 2, 6 ) ) );
 +
 +
また、以下の方法でも複数のカテゴリーを除外できる。
 +
 +
query_posts( array( 'category__not_in' => array( 2, 6 ) ) );
 +
 +
<div id="Tag_Parameters">
 +
=== タグ引数 ===
 +
</div>
 +
指定したタグがつけられた投稿を表示する。
 +
* '''<tt>tag</tt>''' (文字列)- タグスラッグを指定。
 +
* '''<tt>tag_id</tt>''' (整数)- タグ ID を指定。コンマ区切りにした複数 ID の文字列も指定可能。
 +
* '''<tt>tag__and</tt>''' (配列)- タグ ID の配列。指定した複数のタグのすべてを含む投稿のみを表示。
 +
* '''<tt>tag__in</tt>''' (配列)- タグ ID の配列。指定した複数のタグのいずれかを含む投稿のみを表示。
 +
* '''<tt>tag__not_in</tt>''' (配列)- タグ ID の配列。指定した複数のタグのいずれも含まない投稿のみを表示。
 +
* '''<tt>tag_slug__and</tt>''' (配列)- タグスラッグの配列。指定した複数のタグすべてを含む投稿のみを表示。
 +
* '''<tt>tag_slug__in</tt>''' (配列)- タグスラッグの配列。指定した複数のタグのいずれかを含む投稿のみを表示。
 +
 +
'''指定した1つのタグを含む投稿を表示'''
 +
 +
タグのスラッグを用いて特定のタグのみ表示させる場合:
 +
 +
query_posts('tag=cooking');
 +
 +
タグのIDを用いて特定のタグのみ表示させる場合:
 +
 +
query_posts( 'tag_id=13' );
 +
 +
 +
'''指定した複数のタグを含む投稿を表示'''
 +
 +
指定したタグのいずれかを含む投稿を表示。
 +
 +
query_posts('tag=bread,baking');
 +
 +
指定した3つのタグすべてを含む投稿を表示。
 +
 +
query_posts('tag=bread+baking+recipe');
 +
 +
'''複数タグの指定方法'''
 +
 +
タグ ID 37 と 47 の両方を含む投稿を表示。
 +
 +
query_posts( array( 'tag__and' => array( 37, 47 ) ) );
 +
 +
タグ ID 37 または 47 のいずれかを含む投稿を表示するには、前述の <tt>tag</tt> か <tt>tag__in</tt> を使う。
 +
 +
query_posts( array( 'tag__in' => array( 37, 47 ) ) );
 +
 +
タグ ID 37 と 47 のいずれも含まない投稿を表示。
 +
 +
query_posts( array( 'tag__not_in' => array( 37, 47 ) ) );
 +
 +
<tt>tag_slug__in</tt> と <tt>tag_slug__and</tt> はタグスラッグを指定する他は上記と同様です。
 +
 +
[http://boren.nu/archives/2007/10/01/taxonomy-intersections-and-unions/ Ryan's discussion of Tag intersections and unions] も参照してください。
 +
 +
<div id="Taxonomy_Parameters">
 +
=== タクソノミー引数 ===
 +
</div>
 +
特定の[[Taxonomies|タクソノミー]]に関連付けられた投稿を表示。
 +
 +
*  '''<tt>{tax}</tt>''' (''文字列'') - タクソノミースラッグ。
 +
*  '''<tt>tax_query</tt>''' (''配列'') - .
 +
 +
'''シンプルタクソノミークエリ'''
 +
 +
'people' カスタムタクソノミーで 'bob' というスラッグのタグがつけられた投稿を表示。
 +
 +
query_posts( array( 'people' => 'bob', 'posts_per_page' => 10 ) );
 +
 +
'''複数のタクソノミー処理''' ([[Version 3.1|バージョン 3.1]] 以降)
 +
 +
複数のカスタムタクソノミーの投稿を表示。
 +
 +
<pre>
 +
$args = array(
 +
'tax_query' => array(
 +
'relation' => 'AND',
 +
array(
 +
'taxonomy' => 'movie_janner',
 +
'field' => 'slug',
 +
'terms' => array( 'action', 'commedy' ),
 +
),
 +
array(
 +
'taxonomy' => 'actor',
 +
'field' => 'id',
 +
'terms' => array( 103, 115, 206 ),
 +
'operator' => 'NOT IN',
 +
)
 +
)
 +
)
 +
query_posts( $args );
 +
</pre>
 +
 +
<div id="Author_Parameters">
 +
=== 投稿者引数 ===
 +
</div>
 +
指定した ID や名前の投稿者による投稿を表示する。
 +
*  <tt>author=3</tt> (整数)- 表示する投稿者の ID を指定。
 +
*  <tt>author=-3</tt> (整数)- 除外する投稿者の ID を指定。
 +
*  <tt>author_name=Harriet</tt> (文字列)- 投稿者のニックネームを指定(日本語も可)。
 +
 +
'''注意:''' <tt>author_name</tt> は <tt>user_nicename</tt> フィールドの値を指定します。<tt>author</tt> には ID を指定します。
 +
 +
'''author=1 のすべての [[Pages|固定ページ]] をタイトル順, 先頭固定表示無しで表示'''
 +
query_posts('caller_get_posts=1&author=1&post_type=page&post_status=publish&orderby=title&order=ASC');
 +
 +
<div id="Post_.26_Page_Parameters">
 +
=== 投稿・固定ページ引数 ===
 +
</div>
 +
ブログ投稿や固定ページに関連付けられた post を表示。
 +
 +
* '''<tt>p</tt>''' (''整数'')- 投稿 ID を指定。
 +
* '''<tt>name</tt>''' (''文字列'') - [[ブログ入門#Post Slugs|投稿スラッグ]] を指定。
 +
* '''<tt>page_id</tt>''' (''整数'') - 固定ページ ID を指定。
 +
* '''<tt>pagename</tt>''' (''文字列'') - 固定ページスラッグを指定。
 +
* '''<tt>post_parent</tt>''' (''整数'') - 固定ページ ID を指定。子ページのみを返す。
 +
* '''<tt>post__in</tt>''' (''配列'') - 投稿IDを用いて、それのみを指定する。
 +
* '''<tt>post__not_in</tt>''' (''配列'') - 投稿IDを用いて、それ以外を指定する。
 +
* '''<tt>post_type</tt>''' (''string'' / ''array'') - [[Post Types|投稿タイプ]]を用いて指定する。初期値は <tt>post</tt>';
 +
** '<tt>post</tt>'
 +
** '<tt>page</tt>'
 +
** '<tt>revision</tt>'
 +
** '<tt>attachment</tt>'
 +
** '<tt>any</tt>' - revision以外すべてのタイプ
 +
** Custom Post Types (例: movies)
 +
* '''<tt>post_status</tt>''' (''string'' / ''array'') - use post status. Retrieves posts by [[Post Status]], default value is '<tt>publish</tt>';
 +
** '<tt>publish</tt>' - a published post or page
 +
** '<tt>pending</tt>' - post is pending review
 +
** '<tt>draft</tt>' - a post in draft status
 +
** '<tt>auto-draft</tt>' - a newly created post, with no content
 +
** '<tt>future</tt>' - a post to publish in the future
 +
** '<tt>private</tt>' - not visible to users who are not logged in
 +
** '<tt>inherit</tt>' - a revision. see [[関数リファレンス/get_children|get_children]]. 
 +
** '<tt>trash</tt>' - post is in trashbin. added with [[Version 2.9]].
 +
 +
'''ID を指定して投稿・固定ページを表示'''
 +
 +
特定の ID の投稿を表示。
 +
 +
query_posts( 'p=7' );
 +
 +
特定の ID の固定ページを表示。
 +
 +
query_posts( 'page_id=7' );
 +
 +
'''スラッグを指定して投稿・固定ページを表示'''
 +
 +
Display post by his <tt>slug</tt>:
 +
 +
query_posts( 'name=about-my-life' );
 +
 +
Display page by his <tt>slug</tt>:
 +
 +
query_posts( 'pagename=contact' );
 +
 +
'''Show Child Posts/Pages'''
 +
 +
Display child pages using the slug of the parent and the child page, separated by a slash:
 +
 +
query_posts( 'pagename=parent_slug/child_slug' );
 +
 +
Display child pages using parent page ID:
 +
 +
query_posts( 'post_parent=93' );
 +
 +
'''Multiple Posts/Pages Handling'''
 +
 +
Display only the specify posts:
 +
 +
query_posts( array( 'post__in' => array( 2, 5, 12, 14, 20 ) ) );
 +
 +
Display all posts but NOT the specify ones:
 +
 +
query_posts( array( 'post__not_in' => array( 2, 5, 12, 14, 20 ) ) );
 +
 +
Note: you cannot combine 'post__in' and 'post__not_in' in the same query.
 +
 +
'''投稿タイプを指定して投稿を表示'''
 +
 +
ページのみを表示。
 +
 +
query_posts( 'post_type=page' );
 +
 +
'<tt>any</tt>' 投稿タイプを表示 (履歴以外のすべてのタイプを取得)。
 +
 +
query_posts( 'post_type=any' );
 +
 +
カスタム投稿タイプを含む複数の投稿タイプを表示。
 +
 +
query_posts( array( 'post_type' => array( 'post', 'page', 'movie', 'book' ) ) );
 +
 +
'''状態を指定して投稿を表示'''
 +
 +
下書きのみを表示。
 +
 +
query_posts( 'post_status=draft' );
 +
 +
複数の投稿状態を指定して表示。
 +
 +
query_posts( array( 'post_status' => array( 'pending', 'draft', 'future' ) ) );
 +
 +
<div id="Pagination_Parameters">
 +
=== ページ送り引数 ===
 +
</div>
 +
* '''<tt>showposts</tt>''' (''整数'') - number of post to show per page. '''Deprecated''' in favor of 'posts_per_page'.
 +
* '''<tt>posts_per_page</tt>''' (''整数'') - number of post to show per page. Use <tt>'posts_per_page'=>-1</tt> to show all posts. 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.
 +
* '''<tt>nopaging</tt>''' (''ブーリアン'') - 全ての投稿を表示するかページ送りを使うかを指定します。デフォルトは'false'でページ送りを使います。
 +
* '''<tt>paged</tt>''' (''整数'') - number of page. Show the posts that would normally show up just on page X when using the "Older Entries" link.
 +
 +
Pagination Note: 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>query_posts()</tt> remains the same.
 +
 +
'''Show x Posts per page'''
 +
 +
Display 3 posts per page:
 +
 +
query_posts( 'posts_per_page=3' );
 +
 +
'''Show All Post'''
 +
 +
Display all posts in one page:
 +
 +
query_posts( 'posts_per_page=-1' );
 +
 +
Display all posts by disabling pagination:
 +
 +
query_posts( 'nopaging=true' );
 +
 +
'''Show Posts from page x'''
 +
 +
Display posts from page number 6:
 +
 +
query_posts( 'paged=6' );
 +
 +
'''Show Posts from Current Page'''
 +
 +
Display posts from current page:
 +
 +
$page = get_query_var( 'page' );
 +
query_posts( 'paged=$page' );
 +
 +
<div id="Offset_Parameter">
 +
=== オフセット引数 ===
 +
</div>
 +
表示される投稿の先頭から指定した件数をスキップします。
 +
* <tt>offset</tt> (整数)- 投稿の先頭からスキップする件数を指定。
 +
 +
以下は、最新の投稿(1件)に続く5件の投稿を表示。
 +
 +
query_posts('posts_per_page=5&offset=1');
 +
 +
<div id="Order_Orderby_Parameters">
 +
=== 並び順・並べ替え引数 ===
 +
</div>
 +
取得した投稿を並べ替える。
 +
 +
* '''<tt>order</tt>''' (''string'') - Designates the ascending or descending order of the '<tt>orderby</tt>' parameter.
 +
** '<tt>ASC</tt>' - 昇順。小さい値から大きい値の順(1, 2, 3; a, b, c)
 +
** '<tt>DESC</tt>' - 降順。大きい値から小さい値の順(3, 2, 1; c, b, a)
 +
 +
* '''<tt>orderby</tt>''' (''string'') - Sort retrieved posts by:
 +
** '<tt>none</tt>' - 順番指定なし([[Version 2.8|バージョン 2.8]] 以降のみ)
 +
** '<tt>ID</tt>' - Order by post id.
 +
** '<tt>author</tt>' - Order by author.
 +
** '<tt>title</tt>' - Order by title.
 +
** '<tt>date</tt>' - Order by date.
 +
** '<tt>modified</tt>' - Order by last modified date.
 +
** '<tt>parent</tt>' - Order by post/page parent id.
 +
** '<tt>rand</tt>' - Random order.
 +
** '<tt>comment_count</tt>' - コメント数で並べ替え([[Version 2.9|バージョン 2.9]] 以降のみ)
 +
** '<tt>menu_order</tt>' - Order by  Page Order. Used most often for [[Pages|固定ページ]] (''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>).
 +
** '<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).
 +
** '<tt>meta_value_num</tt>' - Order by numeric meta value (available with [[Version 2.8]]).
 +
 +
'''Show Posts sorted by Title, Descending order'''
 +
 +
Display posts sorted by post title in a descending order:
 +
 +
query_posts( 'orderby=title&order=DESC' );
 +
 +
'''Show Random Post'''
 +
 +
Display one random post:
 +
 +
query_posts( 'orderby=rand&posts_per_page=1' );
 +
 +
'''Show Popular Posts'''
 +
 +
Display posts ordered by comment count:
 +
 +
query_posts( 'orderby=comment_count&order=DESC' );
 +
 +
<div id="Sticky_Post_Parameters">
 +
=== 先頭固定投稿引数 ===
 +
</div>
 +
Show sticky post 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>'.
 +
* '''<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:
 +
 +
$sticky = get_option( 'sticky_posts' );
 +
query_posts( 'p=' . $sticky[0] );
 +
 +
Display just the first sticky post, if none return the last post published:
 +
 +
$args = array(
 +
'posts_per_page' => 1,
 +
'post__in'  => get_option( 'sticky_posts' ),
 +
'ignore_sticky_posts' => 1
 +
);
 +
query_posts( $args );
 +
 +
Display just the first sticky post, if none return nothing:
 +
 +
$sticky = get_option( 'sticky_posts' );
 +
$args = array(
 +
'posts_per_page' => 1,
 +
'post__in'  => $sticky,
 +
'ignore_sticky_posts' => 1
 +
);
 +
query_posts( $args );
 +
if ( $sticky[0] ) {
 +
// insert here your stuff...
 +
}
 +
 +
'''Don't Show Sticky Posts'''
 +
 +
Exclude all sticky posts from the query:
 +
 +
query_posts( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );
 +
 +
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_posts( 'ignore_sticky_posts=1&posts_per_page=3&cat=6' );
 +
 +
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( 'page' ) ? get_query_var( 'page' ) : 1;
 +
$sticky = get_option( 'sticky_posts' );
 +
$args = array(
 +
'cat' => 3,
 +
'ignore_sticky_posts' => 1,
 +
'post__not_in' => $sticky,
 +
'paged' => $paged
 +
);
 +
query_posts( $args );
 +
 +
<div id="Time_Parameters">
 +
=== 日時引数 ===
 +
</div>
 +
指定した日時の間に投稿された投稿を表示。
 +
 +
* '''<tt>year</tt>''' (''int'') - 4桁の年(例:2011)
 +
* '''<tt>monthnum</tt>''' (''int'') - 月(1〜12)
 +
* '''<tt>w</tt>''' (''int'') - 0〜53 で年間の週を指定。[http://dev.mysql.com/doc/refman/5.1/ja/date-and-time-functions.html#function_week MySQL WEEK command Mode=1] を使っている。
 +
* '''<tt>day</tt>''' (''int'') - 日(1〜31)
 +
* '''<tt>hour</tt>''' (''int'') - 時(0〜23)
 +
* '''<tt>minute</tt>''' (''int'') - 分 (0〜60)
 +
* '''<tt>second</tt>''' (''int'') - 秒(0〜60)
 +
 +
'''今日の投稿を表示'''
 +
 +
$today = getdate();
 +
query_posts( 'year=' . $today["year"] . '&monthnum=' . $today["mon"] . '&day=' . $today["mday"] );
 +
 +
'''現在の週の投稿のみを表示'''
 +
 +
$week = date('W');
 +
$year = date('Y');
 +
query_posts( 'year=' . $year . '&w=' . $week );
 +
 +
'''12月20日の投稿を表示'''
 +
 +
query_posts( 'monthnum=12&day=20' );
 +
 +
'''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月15日の投稿を表示'''
 +
 +
<pre>
 +
// Create a new filtering function that will add our where clause to the query
 +
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_posts( $query_string );
 +
</pre>
 +
 +
'''最近30日間の投稿を表示'''
 +
<pre>
 +
<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' );
 +
 +
query_posts( $query_string );
 +
</pre> 
 +
 +
'''30〜60日前の投稿を表示'''
 +
<pre>
 +
<pre>
 +
// 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' );
 +
 +
query_posts( $query_string );
 +
</pre>
 +
 +
<div id="Custom_Field_Parameters">
 +
=== カスタムフィールド引数 ===
 +
</div>
 +
カスタムフィールドのキーまたは値を元に投稿を表示。 
 +
 +
* '''<tt>meta_key</tt>''' (''string'') - Custom field key.
 +
* '''<tt>meta_value</tt>''' (''string'') - Custom field value.
 +
* '''<tt>meta_compare</tt>''' (''string'') - '<tt>meta_value=</tt>' で指定された値を比較する演算子。デフォルトは '=' で, '!='、'>'、'>='、'<'、'<=' も使える。
 +
 +
キーが 'color' で値が 'blue' のカスタムフィールドを持つ投稿を表示。
 +
 +
query_posts( 'meta_key=color&meta_value=blue' );
 +
 +
値は問わず、キーが 'color' のカスタムフィールドを持つ投稿を表示。
 +
 +
query_posts( 'meta_key=color' );
 +
 +
キーは問わず、値が 'blue' のカスタムフィールドを持つ投稿を表示。
 +
 +
query_posts( 'meta_value=color' );
 +
 +
キーは問わず、値が 'green' のカスタムフィールドを持つ[[Pages|固定ページ]]を表示。
 +
 +
query_posts( 'post_type=page&meta_value=green' );
 +
 +
Returns posts with a custom field value of zero (0), regardless of the custom field key:
 +
 +
query_posts( 'meta_value'='_wp_zero_value' );
 +
 +
キーが 'color' で値が 'blue' でないカスタムフィールドを持つ投稿と[[Pages|固定ページ]]の両方を表示。
 +
 +
query_posts( 'post_type=any&meta_key=color&meta_compare=!=&meta_value=blue' );
 +
 +
キーが 'miles' で値が 22 以下のカスタムフィールドを持つ投稿を表示。注:値は数値ではなく文字列として扱われているため「99」は「100」より大きくなります。
 +
query_posts( 'meta_key=miles&meta_compare=<=&meta_value=22' );
 +
  
 
<div id="Examples">
 
<div id="Examples">
 +
 
== コード記述例 ==
 
== コード記述例 ==
 
</div>
 
</div>

2013年7月15日 (月) 14:44時点における版

query_posts()はWordPressが投稿を表示するのに使用しているメインクエリーを置き換える手段です。これはメインクエリーを一旦横に置いておき、新しいクエリーで上書きします。query_postsを呼び出したあとは、クエリーの改変を戻すために、wp_reset_query()を呼び出し、オリジナルのメインクエリーを復活させる必要があります。

query_postsを使うことによって、ページ上のメインクエリーが置き換えられ、ページの読み込み速度に影響を与えることに留意してください。最悪の場合、倍かそれ以上の処理が発生します。簡単に使える代わりに、この関数は混乱と問題を引き起こす傾向があります。下記の注意をご覧ください。

一般的な投稿の取得には、WP_Queryか、get_postsを使ってください。

query_postsではなくpre_get_postsフィルターを用い、is_main_queryでチェックしてメインクエリーを変更することが強く推奨されています。

たとえば、ホームで、通常最新の10件の投稿が表示されているとします。もし5件だけ表示したいのであれば、query_posts()を使ってこのように書くことができます(ページ送りについては無視しています)。

query_posts( 'posts_per_page=5' );

functions.phpでpre_get_postsを使って同じことをするなら、このように書けます。

function five_posts_on_homepage( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( 'posts_per_page', '5' );
    }
}
add_action( 'pre_get_posts', 'five_posts_on_homepage' );

注意:pre_get_postsアクションは固定ページのリクエストでは動作しません。

注意

query_posts()はデータベースに問い合わせて投稿の一覧を生成するための、数ある方法のひとつに過ぎません。query_posts()を使うと決める前に、欠点も理解しておいてください。

メインループを変更する

query_posts()はメインループを変更するためのものです。query_posts()はそのために、メインループを生成するクエリーを置き換えます。いったんquery_posts()を使うと、投稿にもとづいたグローバル変数やテンプレートタグも変更されます。query_posts()を呼び出したあとは、条件分岐タグも置き換えられてしまいます。このことが意図しない結果を引き起こすかもしれません。

派生的なループ

派生的な一覧 (例えばページの下部に関連記事を表示したり、サイドバーのウィジェットでリンクの一覧を出したり等) を表示したい場合は、WP_Queryの新しいインスタンスを生成するか、get_posts()を使ってください。

もしquery_posts()を使う場合は、用が済んだら必ずwp_reset_query()を呼び出してください。

'paged' クエリー引数を適切に指定していないと、ページ送りが正しく動作しない可能性があります:英語版Codex "adding the paged parameter"を参照してください。

SQLクエリーが追加発行される

query_postsをテンプレートで使用する場合、WordPressはすでにデータベースへの問い合わせを実行し、テンプレートを読み込む頃にはデータの取り出しを終えています (なぜなら、どのテンプレートが読み込まれるかが決まったということは、すでに処理が終わっているということですから!)。そのため、query_posts()を使ってデフォルトのクエリーを上書きして結果を得るには、どうしても再度データベースに問い合わせし再計算する必要があります。

このことは、小規模なブログベースのウェブサイトを扱っているのであれば、必ずしも問題であるとは言えません。データベースが大きい大規模でトラフィックの多いウェブサイトの開発者であれば、デフォルトのクエリーが呼び出される前に直接変更するなどの代替案を検討するほうがいいかもしれません。requestフィルターでまさにこれを実現できるでしょう。

'parse_query' と 'pre_get_posts' フィルターも内部的に $query オブジェクトを改変しデータベースへ問い合わせるSQLを生成するのに使われます。


使い方

<?php

// クエリ
query_posts( $args );

// ループ
if ( have_posts() ) : 
  while ( have_posts() ) : the_post();
      echo '<li>';
	  the_title();
	  echo '</li>';
  endwhile; 
else:
endif;

// クエリをリセット
wp_reset_query();
?>

オリジナルクエリの保持(ページングなど)

デフォルトでは query_posts を実行すると、引数で指定した変数を除きページング,カテゴリー,日付などの現在のページのクエリ変数はすべて上書きされます。この時、オリジナルのクエリを保持したい場合は、query_poats() の引数にグローバル変数である $query_stringを用いることができます。

例えば、残りの投稿文字列に影響をおよぼすこと無く投稿の表示順を保持する時、ループの前に下記を記述することができます。

global $query_string;
query_posts( $query_string . '&order=ASC' );

query_posts() をこのように用いる時、''で囲まれたパラメーターはアンド記号 & で始まる必要があります。


あるいは、元のクエリ配列を引数配列に統合することもできます。

global $wp_query;
$args = array_merge( $wp_query->query, array( 'post_type' => 'product' ) );
query_posts( $args );


引数の組み合わせ

引数はアンド記号 (&) を使って複数組み合わせて指定することができます:

query_posts( 'cat=3&year=2004' );

「最新の投稿」ページで、カテゴリー ID が 13 かつ今月の投稿を表示する場合:

if (is_home()) {
       query_posts( $query_string . '&cat=13&monthnum=' . date( 'n', current_time( 'timestamp' ) ) );
}

バージョン 2.3 で、カテゴリー ID 1 と 3 に含まれる投稿を2件、タイトルの降順で表示する場合:

query_posts( array( 'category__and' => array(1,3), 'posts_per_page' => 2, 'orderby' => 'title', 'order' => 'DESC' ) );

カテゴリー ID が 1 で "apples" のタグ付けがされた投稿を表示する場合:

query_posts( 'cat=1&tag=apples' );

複数のタグを同時に指定する場合は「+」を用います。下記はカテゴリー ID が 1 で、"apples"と"oranges"のタグがついた投稿を表示します:

query_posts( 'cat=1&tag=apples+oranges' );



パラメーター

ここでの記述例は WP_Query オブジェクトでも使えるものですが、もちろんこれが全てではありません。パラメーターを組み合わせることで、より実用的なクエリが可能になります。パラメーターの詳細はこちらを参照してください。

投稿者引数

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

  • author整数) - ユーザーID.
  • author_name文字列) - use 'user_nicename' (NOT name).

ある投稿者の投稿を表示する

ユーザーIDを用いて投稿者を特定する場合:

query_posts( 'author=123' );

'user_nicename' (ユーザー名ではない名前) を用いて投稿者を特定する場合:

query_posts( 'author_name=rami' );

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

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

query_posts( 'author=2,6,17,38' );

ある投稿者の投稿を表示しない

特定の投稿者「以外」の投稿を全て表示させる場合は、IDの前に '-' (マイナス) をつけます:

query_posts( 'author=-123' );

カテゴリー引数

指定したカテゴリーに分類された投稿を表示する。

  • cat (整数)- カテゴリー ID。
  • category_name (文字列)- カテゴリースラッグを指定(カテゴリー名ではない)。
  • category__and (配列)- カテゴリー ID の配列。指定した複数のカテゴリーすべてに含まれる投稿のみを表示。
  • category__in (配列)- カテゴリー ID の配列。指定した複数のカテゴリーいずれかに含まれる投稿のみを表示。
  • category__not_in (配列)- カテゴリー ID の配列。指定した複数のカテゴリーのいずれにもに含まれない投稿のみを表示。

ひとつのカテゴリーの投稿を表示

ID で指定したカテゴリー(とその子孫カテゴリー)に含まれる投稿のみを表示。

query_posts( 'cat=4' );

カテゴリースラッグで指定したカテゴリー(とその子孫カテゴリー)に含まれる投稿のみを表示。

query_posts( 'category_name=staff' );

複数のカテゴリーの投稿を表示

ID で指定した複数のカテゴリーに含まれる投稿のみを表示。

query_posts( 'cat=2,6,17,38' );

スラッグで指定した複数のカテゴリーに含まれる投稿のみを表示。

query_posts( 'category_name=staff,news' );

指定カテゴリーの投稿を除外

'-'(マイナス)記号を前につけたカテゴリー ID '以外' の投稿を表示。

query_posts( 'cat=-3' );

複数カテゴリーの指定方法

ID で指定した複数のカテゴリーすべてに含まれるカテゴリーを表示。以下はカテゴリー ID 2 と 6 の両方に含まれる投稿を表示。

query_posts( array( 'category__and' => array( 2, 6 ) ) );

カテゴリー ID 2 または 6 に含まれる投稿を表示するには、前述の cat か category__in(こちらは子孫カテゴリーを含みません)を使う。

query_posts( array( 'category__in' => array( 2, 6 ) ) );

また、以下の方法でも複数のカテゴリーを除外できる。

query_posts( array( 'category__not_in' => array( 2, 6 ) ) );

タグ引数

指定したタグがつけられた投稿を表示する。

  • tag (文字列)- タグスラッグを指定。
  • tag_id (整数)- タグ ID を指定。コンマ区切りにした複数 ID の文字列も指定可能。
  • tag__and (配列)- タグ ID の配列。指定した複数のタグのすべてを含む投稿のみを表示。
  • tag__in (配列)- タグ ID の配列。指定した複数のタグのいずれかを含む投稿のみを表示。
  • tag__not_in (配列)- タグ ID の配列。指定した複数のタグのいずれも含まない投稿のみを表示。
  • tag_slug__and (配列)- タグスラッグの配列。指定した複数のタグすべてを含む投稿のみを表示。
  • tag_slug__in (配列)- タグスラッグの配列。指定した複数のタグのいずれかを含む投稿のみを表示。

指定した1つのタグを含む投稿を表示

タグのスラッグを用いて特定のタグのみ表示させる場合:

query_posts('tag=cooking');

タグのIDを用いて特定のタグのみ表示させる場合:

query_posts( 'tag_id=13' );


指定した複数のタグを含む投稿を表示

指定したタグのいずれかを含む投稿を表示。

query_posts('tag=bread,baking');

指定した3つのタグすべてを含む投稿を表示。

query_posts('tag=bread+baking+recipe');

複数タグの指定方法

タグ ID 37 と 47 の両方を含む投稿を表示。

query_posts( array( 'tag__and' => array( 37, 47 ) ) );

タグ ID 37 または 47 のいずれかを含む投稿を表示するには、前述の tagtag__in を使う。

query_posts( array( 'tag__in' => array( 37, 47 ) ) );

タグ ID 37 と 47 のいずれも含まない投稿を表示。

query_posts( array( 'tag__not_in' => array( 37, 47 ) ) );

tag_slug__intag_slug__and はタグスラッグを指定する他は上記と同様です。

Ryan's discussion of Tag intersections and unions も参照してください。

タクソノミー引数

特定のタクソノミーに関連付けられた投稿を表示。

  • {tax} (文字列) - タクソノミースラッグ。
  • tax_query (配列) - .

シンプルタクソノミークエリ

'people' カスタムタクソノミーで 'bob' というスラッグのタグがつけられた投稿を表示。

query_posts( array( 'people' => 'bob', 'posts_per_page' => 10 ) );

複数のタクソノミー処理 (バージョン 3.1 以降)

複数のカスタムタクソノミーの投稿を表示。

$args = array(
	'tax_query' => array(
		'relation' => 'AND',
		array(
			'taxonomy' => 'movie_janner',
			'field' => 'slug',
			'terms' => array( 'action', 'commedy' ),
		),
		array(
			'taxonomy' => 'actor',
			'field' => 'id',
			'terms' => array( 103, 115, 206 ),
			'operator' => 'NOT IN',
		)
	)
)
query_posts( $args );

投稿者引数

指定した ID や名前の投稿者による投稿を表示する。

  • author=3 (整数)- 表示する投稿者の ID を指定。
  • author=-3 (整数)- 除外する投稿者の ID を指定。
  • author_name=Harriet (文字列)- 投稿者のニックネームを指定(日本語も可)。

注意: author_nameuser_nicename フィールドの値を指定します。author には ID を指定します。

author=1 のすべての 固定ページ をタイトル順, 先頭固定表示無しで表示

query_posts('caller_get_posts=1&author=1&post_type=page&post_status=publish&orderby=title&order=ASC');

投稿・固定ページ引数

ブログ投稿や固定ページに関連付けられた post を表示。

  • p整数)- 投稿 ID を指定。
  • name文字列) - 投稿スラッグ を指定。
  • page_id整数) - 固定ページ ID を指定。
  • pagename文字列) - 固定ページスラッグを指定。
  • post_parent整数) - 固定ページ ID を指定。子ページのみを返す。
  • post__in配列) - 投稿IDを用いて、それのみを指定する。
  • post__not_in配列) - 投稿IDを用いて、それ以外を指定する。
  • post_type (string / array) - 投稿タイプを用いて指定する。初期値は post';
    • 'post'
    • 'page'
    • 'revision'
    • 'attachment'
    • 'any' - revision以外すべてのタイプ
    • Custom Post Types (例: movies)
  • post_status (string / array) - use post status. Retrieves posts by Post Status, default value is 'publish';
    • 'publish' - a published post or page
    • 'pending' - post is pending review
    • 'draft' - a post in draft status
    • 'auto-draft' - a newly created post, with no content
    • 'future' - a post to publish in the future
    • 'private' - not visible to users who are not logged in
    • 'inherit' - a revision. see get_children.
    • 'trash' - post is in trashbin. added with Version 2.9.

ID を指定して投稿・固定ページを表示

特定の ID の投稿を表示。

query_posts( 'p=7' );

特定の ID の固定ページを表示。

query_posts( 'page_id=7' );

スラッグを指定して投稿・固定ページを表示

Display post by his slug:

query_posts( 'name=about-my-life' );

Display page by his slug:

query_posts( 'pagename=contact' );

Show Child Posts/Pages

Display child pages using the slug of the parent and the child page, separated by a slash:

query_posts( 'pagename=parent_slug/child_slug' );

Display child pages using parent page ID:

query_posts( 'post_parent=93' );

Multiple Posts/Pages Handling

Display only the specify posts:

query_posts( array( 'post__in' => array( 2, 5, 12, 14, 20 ) ) );

Display all posts but NOT the specify ones:

query_posts( array( 'post__not_in' => array( 2, 5, 12, 14, 20 ) ) );

Note: you cannot combine 'post__in' and 'post__not_in' in the same query.

投稿タイプを指定して投稿を表示

ページのみを表示。

query_posts( 'post_type=page' );

'any' 投稿タイプを表示 (履歴以外のすべてのタイプを取得)。

query_posts( 'post_type=any' );

カスタム投稿タイプを含む複数の投稿タイプを表示。

query_posts( array( 'post_type' => array( 'post', 'page', 'movie', 'book' ) ) );

状態を指定して投稿を表示

下書きのみを表示。

query_posts( 'post_status=draft' );

複数の投稿状態を指定して表示。

query_posts( array( 'post_status' => array( 'pending', 'draft', 'future' ) ) );

ページ送り引数

  • showposts整数) - number of post to show per page. Deprecated in favor of 'posts_per_page'.
  • posts_per_page整数) - number of post to show per page. Use 'posts_per_page'=>-1 to show all posts. 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.
  • nopagingブーリアン) - 全ての投稿を表示するかページ送りを使うかを指定します。デフォルトは'false'でページ送りを使います。
  • paged整数) - number of page. Show the posts that would normally show up just on page X when using the "Older Entries" link.

Pagination Note: You should set get_query_var( 'page' ); if you want your query to work with pagination. Since Wordpress 3.0.2, you do get_query_var( 'page' ) instead of get_query_var( 'paged' ). The pagination parameter 'paged' for query_posts() remains the same.

Show x Posts per page

Display 3 posts per page:

query_posts( 'posts_per_page=3' );

Show All Post

Display all posts in one page:

query_posts( 'posts_per_page=-1' );

Display all posts by disabling pagination:

query_posts( 'nopaging=true' );

Show Posts from page x

Display posts from page number 6:

query_posts( 'paged=6' );

Show Posts from Current Page

Display posts from current page:

$page = get_query_var( 'page' );
query_posts( 'paged=$page' );

オフセット引数

表示される投稿の先頭から指定した件数をスキップします。

  • offset (整数)- 投稿の先頭からスキップする件数を指定。

以下は、最新の投稿(1件)に続く5件の投稿を表示。

query_posts('posts_per_page=5&offset=1');

並び順・並べ替え引数

取得した投稿を並べ替える。

  • order (string) - Designates the ascending or descending order of the 'orderby' parameter.
    • 'ASC' - 昇順。小さい値から大きい値の順(1, 2, 3; a, b, c)
    • 'DESC' - 降順。大きい値から小さい値の順(3, 2, 1; c, b, a)
  • orderby (string) - Sort retrieved posts by:
    • 'none' - 順番指定なし(バージョン 2.8 以降のみ)
    • 'ID' - Order by post id.
    • 'author' - Order by author.
    • 'title' - Order by title.
    • 'date' - Order by date.
    • 'modified' - Order by last modified date.
    • 'parent' - Order by post/page parent id.
    • 'rand' - Random order.
    • 'comment_count' - コメント数で並べ替え(バージョン 2.9 以降のみ)
    • 'menu_order' - Order by Page Order. Used most often for 固定ページ (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 'menu_order' values (they all default to 0).
    • 'meta_value' - Note that a 'meta_key=keyname' 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).
    • 'meta_value_num' - Order by numeric meta value (available with Version 2.8).

Show Posts sorted by Title, Descending order

Display posts sorted by post title in a descending order:

query_posts( 'orderby=title&order=DESC' );

Show Random Post

Display one random post:

query_posts( 'orderby=rand&posts_per_page=1' );

Show Popular Posts

Display posts ordered by comment count:

query_posts( 'orderby=comment_count&order=DESC' );

先頭固定投稿引数

Show sticky post or ignore them.

  • caller_get_posts (bool) - ignore sticky posts or not. Deprecated as of Version 3.1 in favor of 'ignore_sticky_posts'.
  • ignore_sticky_posts (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:

$sticky = get_option( 'sticky_posts' );
query_posts( 'p=' . $sticky[0] );

Display just the first sticky post, if none return the last post published:

$args = array(
	'posts_per_page' => 1,
	'post__in'  => get_option( 'sticky_posts' ),
	'ignore_sticky_posts' => 1
);
query_posts( $args );

Display just the first sticky post, if none return nothing:

$sticky = get_option( 'sticky_posts' );
$args = array(
	'posts_per_page' => 1,
	'post__in'  => $sticky,
	'ignore_sticky_posts' => 1
);
query_posts( $args );
if ( $sticky[0] ) {
	// insert here your stuff...
}

Don't Show Sticky Posts

Exclude all sticky posts from the query:

query_posts( array( 'post__not_in' => get_option( 'sticky_posts' ) ) );

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_posts( 'ignore_sticky_posts=1&posts_per_page=3&cat=6' );

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( 'page' ) ? get_query_var( 'page' ) : 1;
$sticky = get_option( 'sticky_posts' );
$args = array(
	'cat' => 3,
	'ignore_sticky_posts' => 1,
	'post__not_in' => $sticky,
	'paged' => $paged
);
query_posts( $args );

日時引数

指定した日時の間に投稿された投稿を表示。

  • year (int) - 4桁の年(例:2011)
  • monthnum (int) - 月(1〜12)
  • w (int) - 0〜53 で年間の週を指定。MySQL WEEK command Mode=1 を使っている。
  • day (int) - 日(1〜31)
  • hour (int) - 時(0〜23)
  • minute (int) - 分 (0〜60)
  • second (int) - 秒(0〜60)

今日の投稿を表示

$today = getdate();
query_posts( 'year=' . $today["year"] . '&monthnum=' . $today["mon"] . '&day=' . $today["mday"] );

現在の週の投稿のみを表示

$week = date('W'); $year = date('Y'); query_posts( 'year=' . $year . '&w=' . $week );

12月20日の投稿を表示

query_posts( 'monthnum=12&day=20' );

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 filter, and should be modifyable for most time-relative queries.

2009年3月15日の投稿を表示

// Create a new filtering function that will add our where clause to the query
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_posts( $query_string );

最近30日間の投稿を表示

<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' );

query_posts( $query_string );

30〜60日前の投稿を表示

<pre>
// 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' );

query_posts( $query_string );

カスタムフィールド引数

カスタムフィールドのキーまたは値を元に投稿を表示。

  • meta_key (string) - Custom field key.
  • meta_value (string) - Custom field value.
  • meta_compare (string) - 'meta_value=' で指定された値を比較する演算子。デフォルトは '=' で, '!='、'>'、'>='、'<'、'<=' も使える。

キーが 'color' で値が 'blue' のカスタムフィールドを持つ投稿を表示。

query_posts( 'meta_key=color&meta_value=blue' );

値は問わず、キーが 'color' のカスタムフィールドを持つ投稿を表示。

query_posts( 'meta_key=color' );

キーは問わず、値が 'blue' のカスタムフィールドを持つ投稿を表示。

query_posts( 'meta_value=color' );

キーは問わず、値が 'green' のカスタムフィールドを持つ固定ページを表示。

query_posts( 'post_type=page&meta_value=green' );

Returns posts with a custom field value of zero (0), regardless of the custom field key:

query_posts( 'meta_value'='_wp_zero_value' );

キーが 'color' で値が 'blue' でないカスタムフィールドを持つ投稿と固定ページの両方を表示。

query_posts( 'post_type=any&meta_key=color&meta_compare=!=&meta_value=blue' );

キーが 'miles' で値が 22 以下のカスタムフィールドを持つ投稿を表示。注:値は数値ではなく文字列として扱われているため「99」は「100」より大きくなります。

query_posts( 'meta_key=miles&meta_compare=<=&meta_value=22' );

コード記述例

「最新の投稿」ページから指定カテゴリーを除く

index.php ファイルに以下のコードを書くと、カテゴリー ID が 3 以外の 投稿を表示します。

<?php
   if ( is_home() ) {
      query_posts( 'cat=-3' );
   }
?>

複数のカテゴリー ID を指定できる(バージョン 3.3.1 で検証済)。

<?php
   if ( is_home() ) {
      query_posts( 'cat=-1,-2,-3' );
   }
?>

特定の投稿を表示

特定の投稿を表示。

<?php
query_posts( 'p=5' );  
?>

注:特定の投稿が「添付」の場合、pの代わりにattachment_idを用います。

<?php
query_posts( 'attachment_id=5' );  
?>

続きを読む を表示したい場合は、グローバル変数 $more を 0 にします。

<?php
// 投稿 ID が 5 の投稿を表示する
query_posts( 'p=5' );

// 投稿の始めの部分のみ表示するため $more を 0 にする
global $more;
$more = 0;

// ループ
while (have_posts()) : the_post();
  the_content( 'Read the full post »' );
endwhile;
?>

2008年5月に投稿された、カテゴリー ID 1 と 3 の投稿タイトルを1ページに5件ずつ表示する:

<?php if (have_posts()) :  query_posts('posts_per_page=5&cat=1,3&monthnum=5&year=2008'); ?>
  <?php while (have_posts()) : the_post(); ?>
    <?php the_title(); ?>
<?php endwhile; endif; ?>

カテゴリー ID 2 と 6 のいずれにも含まれないすべての投稿のタイトルをリストとして表示する:

<?php if (have_posts()) :  query_posts(array('category__not_in' => array(2,6))); ?>
  <ul>
   <?php while (have_posts()) : the_post(); ?>
     <li><?php the_title(); ?></li>
   <?php endwhile; endif; ?>
  </ul>

カテゴリーの全投稿

管理画面の「設定」→「表示設定」で設定する「1ページに表示する最大投稿数」のパラメーターが適用されます。これを上書きするためには、 'post_per_page' パラメーターを設定します。以下が例です:

query_posts( array ( 'category_name' => 'my-category-slug', 'posts_per_page' => -1 ) );

これにより、指定されたカテゴリーの全ての投稿を表示させます。


しかし、サブカテゴリーまたは子カテゴリーでは「カテゴリー名」が常に使えるとは限らないため、「カテゴリースラッグ」を用いる方が良いとされます。詳しくは、 is_category() を参照してください。

if (is_category('category-slug')): 

	 query_posts(array('category_name' => 'my-category-slug', 'posts_per_page' => -1 )); 

endif; 

RSS/Atom フィードで表示する最新の投稿数

管理画面の「設定」→「表示設定」で設定する「RSS/Atom フィードで表示する最新の投稿数」または 'posts_per_rss' パラメーターは、フィードで使われるクエリーの 'posts_per_page' パラメーターを上書きします。


これをさらに上書きするため (例えば全ての適合する投稿を必要とするカスタムしたICSフィード等) には、以下のように "post_limit" フィルターを用います:

if ( isset ( $query->query_vars['feed'] ) and ( $query->query_vars['feed'] == 'ics' ) )
{
	add_filter( 'post_limits', '__return_empty' );
}


query_posts に変数を与える

query_posts に変数を与える方法をいくつか紹介します。どれを使用してもかまいませんので、必要に応じてWordPress ループ の前に記述してください:

記述例 1

この例は、query_posts を実行する前にクエリ文字列を連結します。まず変数に値を代入し、次に変数と文字列を結合して、実行します。ここではカテゴリー ID を変数で与えることにします。

 // 現在のカテゴリー ID を変数に代入
 $categoryvariable = $cat;  
 
 // クエリを連結
 $args = 'cat=' . $categoryvariable . '&orderby=date&order=ASC'; 
 
 // クエリを実行
  query_posts( $args ); 

記述例 2

次の例では、二重引用符を使って PHP に式を評価させます。まず、現在の年・月を表示し、query_posts で公開日が現在の年・月に該当する投稿を表示します。投稿の並び順は日付の昇順で、公開日の古い順に表示します。

 $current_year = date('Y');
 $current_month = date('m');
 
 query_posts( "cat=22&year=$current_year&monthnum=$current_month&order=ASC" );

記述例 3

この例では、ページネーションを使ってすべての投稿を表示する場合を説明します。デフォルトの $query_string を使って query_posts ですべての投稿を表示させることができます。posts_per_page の値には -1 か各ページに表示したい投稿の数を指定します。後者の場合には posts_nav_link() でページを移動する手段を提供しましょう。

 query_posts( $query_string . '&posts_per_page=-1' );

記述例 4

$query_string 変数を使わずに、引数を配列に入れる方法もあります。例えば、記述例 2 のクエリは以下のようになります:

$args = array(
	'cat'      => 22,
	'year'     => $current_year,
	'monthnum' => $current_month,
	'order'    => 'ASC'
);
query_posts( $args );

この方法は、変数ごとに1行ずつ記述すると読み易くなります。

記述例 5

記述例 4で示した配列を複数のタクソノミーに入れることも可能です。これは単純にタクソノミーのスラッグをコンマで分割した文字列として代入するだけです。この例では、植木等または高倉健が出演している映画の投稿を全て抽出します。

$args = array(
	'post_type'=> 'movie',
	'actor'    => 'Hitoshi Ueki, Ken Takakura',
	'order'    => 'ASC'
);
query_posts( $args );


変更履歴

1.5.0から導入されました。

ソースファイル

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


リソース

最新英語版: WordPress Codex » Template Tags/query posts最新版との差分

関連

記事

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

  • クラス: 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 値を変更する


テンプレートタグへのクエリ文字列型パラメータの渡し方関数リファレンステンプレートタグ目次もご覧ください。


テンプレートタグへの PHP 関数型パラメータの渡し方関数リファレンステンプレートタグ目次もご覧ください。