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

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

提供: WordPress Codex 日本語版
移動先: 案内検索
(最新版に更新 {{原文|Template Tags/get posts|95879}}<!-- 12:42, 7 December 2010 Nsp-code 版 -->)
(最新版に更新、和訳。)
3行目: 3行目:
 
</div>
 
</div>
  
テンプレートタグ [[テンプレートタグ/get_posts|<code>get_posts()</code>]] は、マルチループ(複数ループ)を作成するためのシンプルなタグです。
+
テンプレートタグ [[テンプレートタグ/get_posts|<code>get_posts()</code>]] は、複数の[[The_Loop|ループ]]を作成するためのシンプルなタグです。これを使って、最新の投稿や条件に一致する投稿を取得することができます。
 +
 
 +
[[関数リファレンス/get_pages|get_pages]]/[[:en:Function_Reference/get_pages|en]] とパラメータが似ていますが、名前が異なっていたり微妙に違った値を取るものもいくつかありますのでご注意ください。
  
 
<div id="Usage">
 
<div id="Usage">
9行目: 11行目:
 
</div>
 
</div>
  
  <?php get_posts('引数'); ?>
+
  <?php $posts_array = get_posts( $args ); ?>
 +
 
 +
<div id="Default_Usage">
 +
== デフォルトの使い方 ==
 +
</div>
 +
 
 +
<pre>
 +
<?php $args = array(
 +
'numberposts'    => 5,
 +
'offset'          => 0,
 +
'category'        => ,
 +
'orderby'        => 'post_date',
 +
'order'          => 'DESC',
 +
'include'        => ,
 +
'exclude'        => ,
 +
'meta_key'        => ,
 +
'meta_value'      => ,
 +
'post_type'      => 'post',
 +
'post_mime_type'  => ,
 +
'post_parent'    => ,
 +
'post_status'    => 'publish' );
 +
?>
 +
</pre>
 +
 
 +
<div id="Parameters">
 +
== パラメータ ==
 +
</div>
 +
 
 +
<tt>get_posts()</tt> は [[関数リファレンス/WP_Query|<tt>WP_Query</tt>]] クラスを利用して投稿を取得します。この関数で使えるパラメータについては、<tt>WP_Query</tt> ドキュメンテーションの [[関数リファレンス/WP_Query#Parameters|パラメータセクション]]をご覧ください。
 +
 
 +
'''注意事項'''<br />
 +
* get_posts は <tt>'suppress_filters' => true</tt> をデフォルトとします。一方、<tt>[[テンプレートタグ/query_posts|query_posts()]]</tt> ではデフォルトでフィルタを適用としますので、WPML のようにクエリを変更するプラグインを使う場合にはややこしく感じるかもしれません。
 +
* 'category' パラメータではカテゴリー名ではなくカテゴリー ID を指定する必要があります。
 +
* 'category' パラメータはコンマ区切りの複数カテゴリー ID でもかまいません。これは、<tt>[http://core.trac.wordpress.org/browser/tags/3.3.1/wp-includes/post.php#L1369 get_posts()]</tt> 関数が 'category' パラメータを 'cat' として WP_Query に直接渡すからです。
 +
 
 +
<div id="Return_Value">
 +
== 返り値 ==
 +
</div>
 +
 
 +
; (array) : 投稿オブジェクトのリスト。[[関数リファレンス/get_post#Return|get_post()]] の返り値をご覧ください。
  
 
<div id="Examples">
 
<div id="Examples">
24行目: 65行目:
 
<ul>
 
<ul>
 
<?php
 
<?php
$myposts = get_posts('posts_per_page=5&offset=1&category=1');
+
global $post;
foreach($myposts as $post) :
+
$args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
setup_postdata($post);
+
$myposts = get_posts( $args );
?>
+
foreach( $myposts as $post ) : setup_postdata($post); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
+
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
 
<?php endforeach; ?>
 
<?php endforeach; ?>
 
</ul>
 
</ul>
41行目: 82行目:
 
ループの後で、foreach 実行前の記事が必要な場合は、以下のように記述します。
 
ループの後で、foreach 実行前の記事が必要な場合は、以下のように記述します。
  
<nowiki> <ul>
+
<pre>
<?php
+
<ul>
global $post;
+
<?php
$tmp_post = $post;
+
global $post;
$myposts = get_posts('posts_per_page=5&offset=1&category=1');
+
$tmp_post = $post;
foreach($myposts as $post) :
+
$args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
  setup_postdata($post);
+
$myposts = get_posts( $args );
?>
+
foreach( $myposts as $post ) : setup_postdata($post); ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
+
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
+
<?php endforeach; ?>
<?php $post = $tmp_post; ?>
+
<?php $post = $tmp_post; ?>
</ul> </nowiki>
+
</ul>
 +
</pre>
  
 
<div id="Access_all_post_data">
 
<div id="Access_all_post_data">
60行目: 102行目:
 
いくつかの記事データは、get_posts デフォルトで利用できません。[[テンプレートタグ/the_content|the_content()]] のコンテンツや ID 等です。内部関数 setup_postdata() に、引数として $post 配列を与えることで、解決できます。
 
いくつかの記事データは、get_posts デフォルトで利用できません。[[テンプレートタグ/the_content|the_content()]] のコンテンツや ID 等です。内部関数 setup_postdata() に、引数として $post 配列を与えることで、解決できます。
  
<nowiki> <?php
+
<pre>
 +
<?php
 
  $lastposts = get_posts('posts_per_page=3');
 
  $lastposts = get_posts('posts_per_page=3');
 
  foreach($lastposts as $post) :
 
  foreach($lastposts as $post) :
68行目: 111行目:
 
  <?php the_content(); ?>
 
  <?php the_content(); ?>
 
  <?php endforeach; ?>
 
  <?php endforeach; ?>
</nowiki>
+
</pre>
  
setup_postdata() を呼び出さずに投稿 ID またはコンテンツにアクセスするには、あるいは([[Database_Description|the posts table]] に蓄積されている)任意の投稿データにアクセスするには、<tt>$post->''COLUMN''</tt> を使用できます。ここで <tt>''COLUMN''</tt> はデータのテーブルカラム名です。したがって、<tt>$post->ID</tt> は ID、 <tt>$post->post_content</tt> はコンテンツ、といった具合です。データを表示/出力するには、以下のように [[Glossary#PHP|PHP]] echo コマンドを使用します。
+
setup_postdata() を呼び出さずに投稿 ID またはコンテンツにアクセスするには、あるいは([[データベース概要#.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.EF.BC.9A_wp_posts|the posts table]] に蓄積されている)任意の投稿データにアクセスするには、<tt>$post->''COLUMN''</tt> を使用できます。ここで <tt>''COLUMN''</tt> はデータのテーブルカラム名です。したがって、<tt>$post->ID</tt> は ID、 <tt>$post->post_content</tt> はコンテンツ、といった具合です。データを表示/出力するには、以下のように [[Glossary#PHP|PHP]] echo コマンドを使用します。
  
  <nowiki> <?php echo $post->ID; ?> </nowiki>
+
  <pre>
 +
<?php echo $post->ID; ?>
 +
</pre>
  
 
<div id="Latest_posts_ordered_by_title">
 
<div id="Latest_posts_ordered_by_title">
80行目: 125行目:
 
アルファベット順に昇順で最近の 10 件を表示するには、以下のコードで投稿日、タイトル、抜粋を表示します。
 
アルファベット順に昇順で最近の 10 件を表示するには、以下のコードで投稿日、タイトル、抜粋を表示します。
  
<nowiki>
+
<pre>
<?php
+
<?php
$postslist = get_posts('posts_per_page=10&order=ASC&orderby=title');
+
$args = array( 'numberposts' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
foreach ($postslist as $post) :  
+
$postslist = get_posts( $args );
    setup_postdata($post);
+
foreach ($postslist as $post) : setup_postdata($post); ?>  
?>  
+
<div>
<div>
+
<?php the_date(); ?>
<?php the_date(); ?>
+
<br />
<br />
+
<?php the_title(); ?>   
<?php the_title(); ?>   
+
<?php the_excerpt(); ?>
<?php the_excerpt(); ?>
+
</div>
</div>
+
<?php endforeach; ?>
<?php endforeach; ?>
+
</pre>
</nowiki>
+
 
+
'''注:''' '' orderby パラメータは [[Version 2.6]] で変更されました。このコードでは新しい orderby フォーマットを使用しています。詳細は[[テンプレートタグ/get_posts#Parameters|Parameters]] を参照してください。
+
  
 
<div id="Random_posts">
 
<div id="Random_posts">
103行目: 145行目:
 
orderby パラメータに rand を指定して [[Glossary#MySQL|MySQL]] RAND() 関数を使用して最近の 5 件をランダムに表示します。
 
orderby パラメータに rand を指定して [[Glossary#MySQL|MySQL]] RAND() 関数を使用して最近の 5 件をランダムに表示します。
  
<nowiki> <ul><li><h2>A random selection of my writing</h2>
+
<pre>
    <ul>
+
<ul>
<?php
+
<?php
$rand_posts = get_posts('posts_per_page=5&orderby=rand');
+
$args = array( 'numberposts' => 5, 'orderby' => 'rand' );
foreach( $rand_posts as $post ) :
+
$rand_posts = get_posts( $args );
?>
+
foreach( $rand_posts as $post ) : ?>
    <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
+
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
+
<?php endforeach; ?>
    </ul>
+
</ul>
</li></ul> </nowiki>
+
</pre>
  
 
<div id="Show_all_attachment">
 
<div id="Show_all_attachment">
=== アタッチメントを全て表示する ===
+
=== 添付ファイルを全て表示する ===
 
</div>
 
</div>
  
 
テンプレートの [[The_Loop|Loops]] 外に記述します。
 
テンプレートの [[The_Loop|Loops]] 外に記述します。
  
<?php
+
<pre>
+
<?php
$args = array(
+
$args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => null, 'post_parent' => $post->ID );  
'post_type' => 'attachment',
+
$attachments = get_posts($args);
'posts_per_page' => -1,
+
if ($attachments) {
'post_status' => null,
+
foreach ( $attachments as $attachment ) {
'post_parent' => null, // any parent
+
echo apply_filters( 'the_title' , $attachment->post_title );
);  
+
the_attachment_link( $attachment->ID , false );
$attachments = [[テンプレートタグ/get_posts|get_posts]]($args);
+
}
if ($attachments) {
+
}
foreach ($attachments as $post) {
+
?>
[[関数リファレンス/setup_postdata|setup_postdata]]($post);
+
</pre>
[[テンプレートタグ/the_title|the_title]]();
+
[[テンプレートタグ/the_attachment_link|the_attachment_link]]($post->ID, false);
+
[[テンプレートタグ/the_excerpt|the_excerpt]]();
+
}
+
}
+
+
?>
+
  
 
<div id="Show_attachments_for_the_current_post">
 
<div id="Show_attachments_for_the_current_post">
=== 現在の記事のアタッチメントを表示する ===
+
=== 現在の記事の添付ファイルを表示する ===
 
</div>
 
</div>
  
 
[[The_Loop]] 内(<var>$post->ID</var> が利用できるところ)に記述します。
 
[[The_Loop]] 内(<var>$post->ID</var> が利用できるところ)に記述します。
  
<?php
+
<pre>
+
<?php
$args = array(
+
$args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => null, 'post_parent' => $post->ID );  
'post_type' => 'attachment',
+
$attachments = get_posts($args);
'posts_per_page' => -1,
+
if ($attachments) {
'post_status' => null,
+
foreach ( $attachments as $attachment ) {
'post_parent' => $post->ID
+
echo apply_filters( 'the_title' , $attachment->post_title );
);  
+
the_attachment_link( $attachment->ID , false );
$attachments = [[テンプレートタグ/get_posts|get_posts]]($args);
+
}
if ($attachments) {
+
}
foreach ($attachments as $attachment) {
+
?>
echo [[関数リファレンス/apply_filters|apply_filters]]('the_title', $attachment->post_title);
+
</pre>
[[テンプレートタグ/the_attachment_link|the_attachment_link]]($attachment->ID, false);
+
}
+
}
+
+
?>
+
  
<div id="Parameters_WordPress_2.6+">
+
<div id="Get_a_post_by_its_slug">
== パラメータ(WordPress 2.6以降) ==
+
=== スラッグをもとに投稿を取得する ===
 
</div>
 
</div>
  
"[[テンプレートタグ/get_posts#Parameters:_WordPress_2.5_And_Older|WordPress 2.5以前]]"のパラメータに加えて、<tt>get_posts()</tt> は、<tt>[[テンプレートタグ/query_posts#Parameters|query_posts()]]</tt> が取るパラメータを取ることができます。これらの関数は内部で同じデータベースクエリを使用します。
+
投稿スラッグをもとに投稿 ID を取得できます。caller_get_posts 変数は、このカスタムクエリから先頭固定投稿を除外します。
  
'''注:''' [[Version 2.6]] で orderby オプションがいくつか変更されました。<tt>post_</tt> で始まるフィールドは、この部分が名前から削除されています。例えば、<tt>post_title</tt> は <tt>title</tt> で、<tt>post_date</tt> は <tt>date</tt> です。
+
<pre>
 
+
<?php
'''注: ''' [[Version 3.0]] から、 include および exclude パラメータに、ページ ID 配列を使用することができます。
+
$the_slug = 'my_slug';
 +
$args=array(
 +
  'name' => $the_slug,
 +
  'post_type' => 'post',
 +
  'post_status' => 'publish',
 +
  'showposts' => 1
 +
);
 +
$my_posts = get_posts($args);
 +
if( $my_posts ) {
 +
echo 'ID on the first post found '.$my_posts[0]->ID;
 +
}
 +
?>
 +
</pre>
  
'''注: ''' get_posts はデフォルトで <tt>'suppress_filters'=>true</tt> を使用します。一方、<tt>[[テンプレートタグ/query_posts|query_posts()]]</tt> はデフォルトでフィルターを適用します。WPML のようなクエリを変更するプラグインを使用する場合に混乱するかもしれません。
+
<div id="Taxonomy_Parameters">
 
+
=== タクソノミーパラメータ ===
<div id="Parameters_WordPress_2.5_And_Older">
+
== パラメータ(WordPress 2.5以前) ==
+
 
</div>
 
</div>
  
{{Parameter|$numberposts|整数|取得する投稿の数。0 にするとto use the max number of posts per page の最大値。-1 にすると制限無。|オプション|5}}
+
特定のタクソノミーと関連する投稿を表示します。カスタム投稿タイプに対して登録されたタクソノミーを指定した場合、'category' ではなく代わりに '{custom_taxonomy_name}'(カスタムタクソノミー名)を使って下さい。例えば、"genre"(ジャンル)というタクソノミーがあり、"jazz" というジャンルに分類された投稿のみを表示したい時は以下のコードを使います。
  
{{Parameter|$offset|整数|先頭から何件の投稿を除外するか。|オプション|0}}
+
<pre>
 +
<?php
 +
$args = array(
 +
  'numberposts' => 8,
 +
  'orderby' => 'rand',
 +
  'post_type' => 'albums',
 +
  'genre' => 'jazz',
 +
  'post_status' => 'publish'
 +
);
 +
$show_albums = get_posts ( $args );
 +
?>
 +
</pre>
  
{{Parameter|$category|整数|指定したカテゴリID の投稿のみを返す。(-3のように)カテゴリID をマイナスにすると、このカテゴリID以外の投稿を返す。複数のカテゴリを指定する場合は、カテゴリIDをカンマで区切る(配列での指定は不可)。|オプション}}
+
以下の例では、"tax_query" を使い、"genre" カスタムタクソノミーの "jazz" に分類された投稿のみを取得します。
  
{{Parameter|$category_name|文字列|指定したカテゴリー名またはカテゴリースラッグの投稿のみを返す。|オプション}}
+
<pre>
 +
$args = array(
 +
'tax_query' => array(
 +
array(
 +
'taxonomy' => 'genre',
 +
'field' => 'slug',
 +
'terms' => 'jazz'
 +
)
 +
)
 +
);
 +
$postslist = get_posts( $args );
 +
</pre>
  
{{Parameter|$tag|文字列|指定したタグスラッグの投稿のみを返す。複数のタグスラッグを指定する場合は、カンマで区切ると、いずれかのタグにマッチした投稿をすべて返す。タグスラッグを空白で区切って指定すると、すべてのタグにマッチした投稿を返す。|オプション}}
+
他の例については、<tt>WP_Query</tt> ドキュメンテーションの [[関数リファレンス/WP_Query#Taxonomy_Parameters|タクソノミーパラメータのセクション]]をご覧ください。
  
{{Parameter|$orderby|文字列|以下に示す様々な値(空白で区切る)で並べ替える。
+
<div id=Custom_Field_Parameters">
<ul>
+
=== Custom Field Parameters ===
<li><tt>'author'</tt> - 著者ID。</li>
+
</div>
<li><tt>'category'</tt> - カテゴリID。</li>
+
<li><tt>'content'</tt> - コンテンツ。</li>
+
<li><tt>'date'</tt> - 作成日。</li>
+
<li><tt>'ID'</tt> - 投稿ID。</li>
+
<li><tt>'menu_order'</tt> - メニュー。ページとアタッチメントでのみ有効。</li>
+
<li><tt>'mime_type'</tt> - MIME type。アタッチメントでのみ有効。</li>
+
<li><tt>'modified'</tt> - 最終更新日</li>
+
<li><tt>'name'</tt> - stub。</li>
+
<li><tt>'parent'</tt> - 親ID。</li>
+
<li><tt>'password'</tt> - パスワード。</li>
+
<li><tt>'rand'</tt> - ランダム。</li>
+
<li><tt>'status'</tt> - ステータス。</li>
+
<li><tt>'title'</tt> - タイトル。</li>
+
<li><tt>'type'</tt> - 投稿タイプ。</li>
+
</ul>
+
'''注:'''
+
<ul>
+
<li><tt>ID</tt> と <tt>rand</tt> は [[Version 2.5]]から利用可能。</li>
+
</ul>|オプション|date}}''
+
  
{{Parameter|$order|文字列|<tt>$orderby</tt> でのソート方式。有効な値:<ul><li><tt>'ASC'</tt> - 昇順(低から高)。</li><li><tt>'DESC'</tt> - 降順(高から低)。</li></ul>|オプション|DESC}}
+
あるカスタムフィールドと関連する投稿のみを表示します。以下の例では、"meta_query" を使い、"product" 投稿タイプで "featured" というメタキーが "yes" という値を持つ投稿を取得します。
  
{{Parameter|$include|文字列|表示したい投稿のID。カンマまたは空白で区切る。次の例では、6 つの投稿を表示する。<ul><li>'45,63,78,94,128,140'</li></ul>'''注: '''''このパラメータを使用すると posts_per_page, offset, category, exclude, meta_key, meta_value, および post_parent パラメータを上書きします。''|オプション}}
+
<pre>
 +
$args = array(
 +
'post_type' => 'product',
 +
'meta_query' => array(
 +
array(
 +
'key' => 'featured',
 +
'value' => 'yes',
 +
)
 +
)
 +
);
 +
$postslist = get_posts( $args );
 +
</pre>
  
{{Parameter|$exclude|文字列|表示したくない投稿のID。カンマまたは空白で区切る。( <tt>$include</tt> パラメータを参照)|オプション}}
+
他の例については、<tt>WP_Query</tt> ドキュメンテーションの [[関数リファレンス/WP_Query#Custom_Field_Parameters|カスタムフィールドパラメータのセクション]]をご覧ください。
  
{{Parameter|$meta_key and $meta_value|文字列|メタフィールド(カスタムフィールド)のキーと値を持つ投稿のみ表示する。両方のパラメータ指定が必要(一方だけでは動作しない)。|オプション}}
+
<div id=Change_Log">
 +
==変更履歴==
 +
</div>
  
{{Parameter|$post_type|文字列|表示する投稿のタイプ。利用可能なオプション:<ul><li>post - デフォルト</li><li>page</li><li>attachment</li><li>''any'' - 全て</li></ul>|オプション|post}}
+
* [[Version 1.2|1.2.0]] 以降
  
{{Parameter|$post_status|文字列|指定したステータスの投稿を表示する。複数のステータスを指定する場合はカンマで区切る。利用可能なオプション:<ul><li>publish - デフォルト</li><li>private</li><li>draft</li><li>future</li><li>inherit - <tt>$post_type</tt> がアタッチメントのときのデフォルト</li><li>''(blank)'' - すべてのステータス(WordPress version 2.8 以降では、'any' を使用する。変更された時期は不明。)</ul>|オプション|publish}}
+
<div id=Source_File">
 +
==ソースファイル==
 +
</div>
  
{{Parameter|$post_parent|整数|このIDの投稿の子のみを表示する。|オプション}}
+
<tt>get_posts()</tt> は {{Trac|wp-includes/post.php}} にあります。
 
+
{{Parameter|$nopaging|真偽値|ページングを有効/無効にする。ページングを無効にすると <tt>$numberposts</tt> オプションが無視される。|オプション}}
+
  
 
<div id="Related">
 
<div id="Related">
233行目: 289行目:
 
</div>
 
</div>
  
* [http://wordpress.org/extend/plugins/post-types-order/ Change Order for Custom Post Types in WordPress 3.0 and up]
+
{{原文|Template Tags/get posts|115443}}<!-- 2012-04-03T09:54:48 Donutz 版 -->
 
+
{{原文|Template Tags/get posts|95879}}<!-- 12:42, 7 December 2010 Nsp-code 版 -->
+
  
 
{{Query Tags}}
 
{{Query Tags}}

2012年5月8日 (火) 22:33時点における版

テンプレートタグ get_posts() は、複数のループを作成するためのシンプルなタグです。これを使って、最新の投稿や条件に一致する投稿を取得することができます。

get_pages/en とパラメータが似ていますが、名前が異なっていたり微妙に違った値を取るものもいくつかありますのでご注意ください。

使い方

<?php $posts_array = get_posts( $args ); ?>

デフォルトの使い方

<?php $args = array(
	'numberposts'     => 5,
	'offset'          => 0,
	'category'        => ,
	'orderby'         => 'post_date',
	'order'           => 'DESC',
	'include'         => ,
	'exclude'         => ,
	'meta_key'        => ,
	'meta_value'      => ,
	'post_type'       => 'post',
	'post_mime_type'  => ,
	'post_parent'     => ,
	'post_status'     => 'publish' );
?>

パラメータ

get_posts()WP_Query クラスを利用して投稿を取得します。この関数で使えるパラメータについては、WP_Query ドキュメンテーションの パラメータセクションをご覧ください。

注意事項

  • get_posts は 'suppress_filters' => true をデフォルトとします。一方、query_posts() ではデフォルトでフィルタを適用としますので、WPML のようにクエリを変更するプラグインを使う場合にはややこしく感じるかもしれません。
  • 'category' パラメータではカテゴリー名ではなくカテゴリー ID を指定する必要があります。
  • 'category' パラメータはコンマ区切りの複数カテゴリー ID でもかまいません。これは、get_posts() 関数が 'category' パラメータを 'cat' として WP_Query に直接渡すからです。

返り値

(array) 
投稿オブジェクトのリスト。get_post() の返り値をご覧ください。

用例

リストの生成

サイトのフロントページに最新の記事を 1件のみ表示するよう設定していて、その次から 5件かつカテゴリID 1 の記事へのリンクと抜粋文を表示したいとき、次のようにコードを書きます。

<ul>
<?php
global $post;
$args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
$myposts = get_posts( $args );
foreach( $myposts as $post ) :	setup_postdata($post); ?>
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>

注: 上記クエリは、2件以上の記事があるカテゴリで使うべき。そうでないと、何も表示されない。

オフセットのリセット

ループの後で、foreach 実行前の記事が必要な場合は、以下のように記述します。

<ul>
<?php
global $post;
$tmp_post = $post;
$args = array( 'numberposts' => 5, 'offset'=> 1, 'category' => 1 );
$myposts = get_posts( $args );
foreach( $myposts as $post ) : setup_postdata($post); ?>
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
<?php $post = $tmp_post; ?>
</ul>

全記事データにアクセスする

いくつかの記事データは、get_posts デフォルトで利用できません。the_content() のコンテンツや ID 等です。内部関数 setup_postdata() に、引数として $post 配列を与えることで、解決できます。

<?php
 $lastposts = get_posts('posts_per_page=3');
 foreach($lastposts as $post) :
    setup_postdata($post);
 ?>
 <h2><a href="<?php the_permalink(); ?>" id="post-<?php the_ID(); ?>"><?php the_title(); ?></a></h2>
 <?php the_content(); ?>
 <?php endforeach; ?>

setup_postdata() を呼び出さずに投稿 ID またはコンテンツにアクセスするには、あるいは(the posts table に蓄積されている)任意の投稿データにアクセスするには、$post->COLUMN を使用できます。ここで COLUMN はデータのテーブルカラム名です。したがって、$post->ID は ID、 $post->post_content はコンテンツ、といった具合です。データを表示/出力するには、以下のように PHP echo コマンドを使用します。

 <?php echo $post->ID; ?>
 

最近の投稿をタイトル順に並べる

アルファベット順に昇順で最近の 10 件を表示するには、以下のコードで投稿日、タイトル、抜粋を表示します。

<?php
$args = array( 'numberposts' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ($postslist as $post) :  setup_postdata($post); ?> 
	<div>
		<?php the_date(); ?>
		<br />
		<?php the_title(); ?>   
		<?php the_excerpt(); ?>
	</div>
<?php endforeach; ?>

ランダムに表示する

orderby パラメータに rand を指定して MySQL RAND() 関数を使用して最近の 5 件をランダムに表示します。

<ul>
<?php
$args = array( 'numberposts' => 5, 'orderby' => 'rand' );
$rand_posts = get_posts( $args );
foreach( $rand_posts as $post ) : ?>
	<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>

添付ファイルを全て表示する

テンプレートの Loops 外に記述します。

<?php
$args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => null, 'post_parent' => $post->ID ); 
$attachments = get_posts($args);
if ($attachments) {
	foreach ( $attachments as $attachment ) {
		echo apply_filters( 'the_title' , $attachment->post_title );
		the_attachment_link( $attachment->ID , false );
	}
}
?>

現在の記事の添付ファイルを表示する

The_Loop 内($post->ID が利用できるところ)に記述します。

<?php
$args = array( 'post_type' => 'attachment', 'numberposts' => -1, 'post_status' => null, 'post_parent' => $post->ID ); 
$attachments = get_posts($args);
if ($attachments) {
	foreach ( $attachments as $attachment ) {
		echo apply_filters( 'the_title' , $attachment->post_title );
		the_attachment_link( $attachment->ID , false );
	}
}
?>

スラッグをもとに投稿を取得する

投稿スラッグをもとに投稿 ID を取得できます。caller_get_posts 変数は、このカスタムクエリから先頭固定投稿を除外します。

<?php
$the_slug = 'my_slug';
$args=array(
  'name' => $the_slug,
  'post_type' => 'post',
  'post_status' => 'publish',
  'showposts' => 1
);
$my_posts = get_posts($args);
if( $my_posts ) {
echo 'ID on the first post found '.$my_posts[0]->ID;
}
?>

タクソノミーパラメータ

特定のタクソノミーと関連する投稿を表示します。カスタム投稿タイプに対して登録されたタクソノミーを指定した場合、'category' ではなく代わりに '{custom_taxonomy_name}'(カスタムタクソノミー名)を使って下さい。例えば、"genre"(ジャンル)というタクソノミーがあり、"jazz" というジャンルに分類された投稿のみを表示したい時は以下のコードを使います。

<?php
$args = array(
   'numberposts' => 8,
   'orderby' => 'rand',
   'post_type' => 'albums',
   'genre' => 'jazz',
   'post_status' => 'publish'
);
$show_albums = get_posts ( $args );
?>

以下の例では、"tax_query" を使い、"genre" カスタムタクソノミーの "jazz" に分類された投稿のみを取得します。

$args = array(
	'tax_query' => array(
		array(
			'taxonomy' => 'genre',
			'field' => 'slug',
			'terms' => 'jazz'
		)
	)
);
$postslist = get_posts( $args );

他の例については、WP_Query ドキュメンテーションの タクソノミーパラメータのセクションをご覧ください。

Custom Field Parameters

あるカスタムフィールドと関連する投稿のみを表示します。以下の例では、"meta_query" を使い、"product" 投稿タイプで "featured" というメタキーが "yes" という値を持つ投稿を取得します。

$args = array(
	'post_type' => 'product',
	'meta_query' => array(
		array(
			'key' => 'featured',
			'value' => 'yes',
		)
	)
 );
$postslist = get_posts( $args );

他の例については、WP_Query ドキュメンテーションの カスタムフィールドパラメータのセクションをご覧ください。

変更履歴

ソースファイル

get_posts()wp-includes/post.php にあります。

最新英語版: WordPress Codex » Template Tags/get 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 値を変更する


関数リファレンステンプレートタグ目次もご覧ください。