- サイトデザイン工事中です。ご意見をお寄せください。
- 赤色のリンクは、まだ日本語Codexに存在しないページ・画像です。英語版と併せてご覧ください。(詳細)
テンプレートタグ/get posts
目次 |
説明
テンプレートタグ get_posts() は、マルチループ(複数ループ)を作成するためのシンプルなタグです。
使い方
<?php get_posts('引数'); ?>
用例
リストの生成
サイトのフロントページに最新の記事を 1件のみ表示するよう設定していて、その次から 5件かつカテゴリID 1 の記事へのリンクと抜粋文を表示したいとき、次のようにコードを書きます。
<ul>
<?php
$myposts = get_posts('posts_per_page=5&offset=1&category=1');
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;
$myposts = get_posts('posts_per_page=5&offset=1&category=1');
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
$postslist = get_posts('posts_per_page=10&order=ASC&orderby=title');
foreach ($postslist as $post) :
setup_postdata($post);
?>
<div>
<?php the_date(); ?>
<br />
<?php the_title(); ?>
<?php the_excerpt(); ?>
</div>
<?php endforeach; ?>
注: orderby パラメータは Version 2.6 で変更されました。このコードでは新しい orderby フォーマットを使用しています。詳細はParameters を参照してください。
ランダムに表示する
orderby パラメータに rand を指定して MySQL RAND() 関数を使用して最近の 5 件をランダムに表示します。
<ul><li><h2>A random selection of my writing</h2>
<ul>
<?php
$rand_posts = get_posts('posts_per_page=5&orderby=rand');
foreach( $rand_posts as $post ) :
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
</ul>
</li></ul>
アタッチメントを全て表示する
テンプレートの Loops 外に記述します。
<?php
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -1,
'post_status' => null,
'post_parent' => null, // any parent
);
$attachments = get_posts($args);
if ($attachments) {
foreach ($attachments as $post) {
setup_postdata($post);
the_title();
the_attachment_link($post->ID, false);
the_excerpt();
}
}
?>
現在の記事のアタッチメントを表示する
The_Loop 内($post->ID が利用できるところ)に記述します。
<?php
$args = array(
'post_type' => 'attachment',
'posts_per_page' => -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);
}
}
?>
パラメータ(WordPress 2.6以降)
"WordPress 2.5以前"のパラメータに加えて、get_posts() は、query_posts() が取るパラメータを取ることができます。これらの関数は内部で同じデータベースクエリを使用します。
注: Version 2.6 で orderby オプションがいくつか変更されました。post_ で始まるフィールドは、この部分が名前から削除されています。例えば、post_title は title で、post_date は date です。
注: Version 3.0 から、 include および exclude パラメータに、ページ ID 配列を使用することができます。
注: get_posts はデフォルトで 'suppress_filters'=>true を使用します。一方、query_posts() はデフォルトでフィルターを適用します。WPML のようなクエリを変更するプラグインを使用する場合に混乱するかもしれません。
パラメータ(WordPress 2.5以前)
- $numberposts
- (整数) (オプション) 取得する投稿の数。0 にするとto use the max number of posts per page の最大値。-1 にすると制限無。
- 初期値: 5
- $offset
- (整数) (オプション) 先頭から何件の投稿を除外するか。
- 初期値: 0
- $category
- (整数) (オプション) 指定したカテゴリID の投稿のみを返す。(-3のように)カテゴリID をマイナスにすると、このカテゴリID以外の投稿を返す。複数のカテゴリを指定する場合は、カテゴリIDをカンマで区切る(配列での指定は不可)。
- 初期値: なし
- $category_name
- (文字列) (オプション) 指定したカテゴリー名またはカテゴリースラッグの投稿のみを返す。
- 初期値: なし
- $tag
- (文字列) (オプション) 指定したタグスラッグの投稿のみを返す。複数のタグスラッグを指定する場合は、カンマで区切ると、いずれかのタグにマッチした投稿をすべて返す。タグスラッグを空白で区切って指定すると、すべてのタグにマッチした投稿を返す。
- 初期値: なし
- $orderby
- (文字列) (オプション) 以下に示す様々な値(空白で区切る)で並べ替える。
- 'author' - 著者ID。
- 'category' - カテゴリID。
- 'content' - コンテンツ。
- 'date' - 作成日。
- 'ID' - 投稿ID。
- 'menu_order' - メニュー。ページとアタッチメントでのみ有効。
- 'mime_type' - MIME type。アタッチメントでのみ有効。
- 'modified' - 最終更新日
- 'name' - stub。
- 'parent' - 親ID。
- 'password' - パスワード。
- 'rand' - ランダム。
- 'status' - ステータス。
- 'title' - タイトル。
- 'type' - 投稿タイプ。
注:
- ID と rand は Version 2.5から利用可能。
- 初期値: date
- $order
- (文字列) (オプション) $orderby でのソート方式。有効な値:
- 'ASC' - 昇順(低から高)。
- 'DESC' - 降順(高から低)。
- 初期値: DESC
- $include
- (文字列) (オプション) 表示したい投稿のID。カンマまたは空白で区切る。次の例では、6 つの投稿を表示する。
- '45,63,78,94,128,140'
- 初期値: なし
- $exclude
- (文字列) (オプション) 表示したくない投稿のID。カンマまたは空白で区切る。( $include パラメータを参照)
- 初期値: なし
- $meta_key and $meta_value
- (文字列) (オプション) メタフィールド(カスタムフィールド)のキーと値を持つ投稿のみ表示する。両方のパラメータ指定が必要(一方だけでは動作しない)。
- 初期値: なし
- $post_type
- (文字列) (オプション) 表示する投稿のタイプ。利用可能なオプション:
- post - デフォルト
- page
- attachment
- any - 全て
- 初期値: post
- $post_status
- (文字列) (オプション) 指定したステータスの投稿を表示する。複数のステータスを指定する場合はカンマで区切る。利用可能なオプション:
- publish - デフォルト
- private
- draft
- future
- inherit - $post_type がアタッチメントのときのデフォルト
- (blank) - すべてのステータス(WordPress version 2.8 以降では、'any' を使用する。変更された時期は不明。)
- 初期値: publish
- $post_parent
- (整数) (オプション) このIDの投稿の子のみを表示する。
- 初期値: なし
- $nopaging
- (真偽値) (オプション) ページングを有効/無効にする。ページングを無効にすると $numberposts オプションが無視される。
- 初期値: なし