query_posts()

query_posts()関数の概要

query_posts()は、WordPressのメインクエリをカスタマイズするための関数です。この関数を使用すると、ページのメインクエリを変更して、特定の条件に基づいた投稿を表示できます。ただし、query_posts()は推奨されておらず、代わりにWP_Queryクラスやpre_get_postsアクションフックを使用することが推奨されています。query_posts()を使うと、既存のメインクエリを上書きし、予期しない副作用を引き起こす可能性があります。

パラメータの説明

query_posts()関数は、WP_Queryと同様に、多くのパラメータを受け取ります。以下に主要なものを示します。

  • ‘post_type’ (文字列または配列): 取得する投稿の種類。デフォルトは ‘post’。
  • ‘posts_per_page’ (整数): 1ページあたりに表示する投稿数。-1を指定するとすべての投稿が取得されます。
  • ‘paged’ (整数): 現在のページ番号。ページネーションに使用します。
  • ‘category_name’ (文字列): 特定のカテゴリーに属する投稿を取得します。
  • ‘tag’ (文字列): 特定のタグが付いた投稿を取得します。
  • ‘meta_key’ (文字列): メタキーに基づいて投稿をフィルタリングします。
  • ‘meta_value’ (文字列): メタバリューに基づいて投稿をフィルタリングします。
  • ‘orderby’ (文字列または配列): 取得する投稿の並び順を指定します。例: ‘date’, ‘title’, ‘rand’ など。
  • ‘order’ (文字列): 並び順を ‘ASC’(昇順)または ‘DESC’(降順)で指定します。

使用例

以下の例では、query_posts()を使用して、カテゴリー ‘news’ に属する投稿を5件取得し、ループ内で表示しています。

query_posts(array(
    'post_type' => 'post',
    'posts_per_page' => 5,
    'category_name' => 'news'
));

if (have_posts()) {
    while (have_posts()) {
        the_post();
        ?>
        <h2><?php the_title(); ?></h2>
        <div><?php the_excerpt(); ?></div>
        <?php
    }
    wp_reset_query();
} else {
    echo 'No posts found';
}

この例では、カテゴリー ‘news’ に属する5件の投稿が取得され、それぞれの投稿タイトルと抜粋が表示されます。wp_reset_query()関数は、グローバルなクエリ変数をリセットし、元のメインクエリを復元します。

関連する関数

  • WP_Query: 新しいクエリを作成するためのクラス。query_posts()よりも推奨されます。
  • get_posts(): クエリを実行して投稿の配列を取得します。WP_Queryの簡易版です。
  • pre_get_posts: メインクエリをカスタマイズするためのアクションフックです。最も推奨される方法です。
  • wp_reset_query(): query_posts()の後にメインクエリをリセットします。

これらの関数とフックを理解することで、WordPressでのデータ取得とクエリカスタマイズをより効果的に行うことができます。特に、新しいプロジェクトではWP_Querypre_get_postsの使用を検討してください。