この記事は最後に更新してから1年以上経過しています。
説明
get_postsと query_postsは、どちらも複数の投稿情報を取得することができる便利な関数である。パラメータとして指定できる内容も共通しているものが多く、query_postsがより詳細なパラメータを指定でき、高機能になっている。まずは、パラメータで指定できる意味(目的)が同じキーワードを見ていこう。
意味 | get_postsのキーワード | query_postsのキーワード |
---|---|---|
取得件数 | numberposts | posts_per_page |
取得開始位置 | offset | offset |
ソート対象 | orderby | orderby |
ソート順 | order | order |
取得する投稿情報ID | include | post__in |
除外する投稿情報ID | exclude | post__not_in |
投稿情報タイプ | post_type | post_type |
取得・除外するカテゴリID | category | cat |
カスタムフィールドの名前 | meta_key | meta_key |
カスタムフィールドの値 | meta_value | meta_value |
次に、query_postsにのみ存在する主なキーワードを見てみよう。
キーワード | 意味 |
---|---|
s | 検索文字 |
category_name | カテゴリ名 |
tag | 投稿タグのスラッグ |
author | 投稿者ID |
author_name | 投稿者名 |
このように、query_postsはget_postsの検索機能を内包し、さらにプラスアルファの検索機能を備えていることを確認できたわけだが、この2つの関数には検索機能のほかに本質的な違いがある。それは、グローバル変数へ影響を及ぼすかどうか。query_postsの検索結果はさまざまなグローバル変数に影響を及ぼすが、get_postsの検索結果にはそういったことがない。
具体的な使い方の違いを少し紹介する。
$posts1 = get_posts( 'category=1' );
$posts2 = query_posts( 'cat=1' );
<?php while ( have_posts() ) : the_post(); ?>
// ここに処理を記述
<php endwhile; ?>
次は、サイドバーに特定のカテゴリの投稿記事の見出しを表示するケース。この場合は、get_postsを使用するほうがいい。
<ul>
<?php
$info_posts = query_posts( 'cat=1' );
foreach ( $info_posts as $info ) {
echo '<li>'.$info->post_title.'</li>';
}
?>
</ul>
今度は、キーワード検索で特定のカテゴリのみを検索する場合。こちらは、query_postsを使用するほうがいいだろう。具体的な使い方としては、テーマ内のsearch.phpの冒頭で次のような処理を行えばいい。
<?php
global $query_string;
query_posts( $query_string.'&cat=1,2,3' );
?>
get_postsとquery_postsのおおよその違いはこんな感じだ。
2011/8/1追記:「時代はWP_Queryなのか」も合わせてお読みください。
最終更新 : 2018年05月27日 10:51
関連
お勧め
add_shortcode(2018年5月27日 更新)
void add_shortcode( string $tag, mixed $func )
ショートコード(独自タグ)を追加する。ショートコードは、投稿記事内でテキスト内容がない[tag]や、テキストを内包する[tag]テキスト[/tag]の書式で使用できる独自タグのこと。標準の状態では、 the_content関数によって表示する直前のフィルター処理内でパラメータ$funcで指定した関数・メソッドが実行される。
get_user_setting(2022年1月31日 更新)
mixed get_user_setting( string $name [ , string $default = false ] )
ユーザーインターフェイス設定を取得する。
have_posts(2018年5月27日 更新)
bool have_posts( )
次の投稿データが存在するかを調べる。
in_category(2018年5月27日 更新)
bool in_category( mixed $category [ , mixed $post = null ] )
投稿情報が指定したカテゴリーに属しているか調べる。
add_feed(2024年6月24日 更新)
string add_feed( string $feedname, callable $callback )
フィードを追加する。