get_postsでサブループを作成する例|パラメータの設定など【WordPress】

WordPressでサイトを作成していると、メインループとは違った条件のループ(サブループ)を作成したい場合があると思います。
今回は、get_posts関数を使用してサブループを作成するソースコードの例と、get_posts関数の主なパラメータの紹介となります。
サブループを作成する際には、WP_Queryを使用する場合もあります。違いとしては、WP_Query使用する場合では、メソッド(have_posts、the_post、next_postなど)を使用し、投稿データを扱うことができます。その他、投稿を取得するパラメータが違う場合もあります。
WP_Queryについては、以下を参考にしてみてください。
get_posts関数を使用したサブループの例
下記ソースコードは、get_posts 関数で取得した投稿データを、foreachループを利用して出力するサブループの例となり、サブループを出力したい箇所に記述します。
<ul>
<?php
// get_posts()のパラメータを指定
$args = array(
// 記事を3件表示
'posts_per_page' => 3,
// 記事をランダムで表示
'orderby' => 'rand'
);
// パラメータに基づいた投稿データの配列を取得
$my_posts = get_posts( $args );
// ループ開始
foreach ( $my_posts as $post ) :
// サブループの投稿データをセット
setup_postdata( $post );
?>
<li>
<a href="<?php the_permalink(); ?>">
<h2><?php the_title(); ?></h2>
<?php the_content(); ?>
</a>
</li>
<?php
endforeach;
//ループ終了
// メインクエリの投稿データに戻す
wp_reset_postdata();
?>
</ul>
get_posts関数のコードの説明
上記、get_posts関数のコードのポイントとなる箇所となります。
get_posts()
get_posts関数では、パラメータで指定した投稿データを配列で取得できます。
例のコードでは4行目からの箇所で、サブループの投稿データをget_posts関数で取得しています。パラメータには、投稿記事を3件表示し、表示順はランダムとして指定しています。
setup_postdata()
setup_postdata関数では、引数に指定した投稿データを各種のグローバル変数へセットします。それにより、テンプレートタグを使って投稿データを取得できます。
例のコードでは16行目からの箇所で、setup_postdata関数の引数に、get_posts関数で取得したサブループの投稿データをセットしています。
wp_reset_postdata()
wp_reset_postdata関数は、グローバル変数へセットされたサブループの投稿データを、メインクエリの投稿データに戻します。それにより、以降メインループの投稿データを利用できます。
例のコードでは29行目の箇所となります。
get_posts()の主なパラメータ
以下は、get_posts関数で指定できる主なパラメータの例となります。
表示・順序関連
表示・順序関連のパラメータです。下記で指定してあるパラメータはデフォルトの値となります。
<?php
$args = array(
// 1ページに表示する記事の件数
'posts_per_page' => 5,
// ソート順の対象。date、category、title、randなどで指定
'orderby' => 'date',
// ソート順。ASC(昇順)かDESC(降順)で指定
'order' => 'DESC'
);
$my_posts = get_posts( $args );
?>
投稿データ関連
投稿データ関連(カスタムフィールド以外)のパラメータです。下記で指定してあるパラメータはデフォルトの値となります。
<?php
$args = array(
// 指定したページのタイプを取得。post、pageなど
'post_type' => 'post',
// 指定したカテゴリーIDをもつ投稿。除外したいカテゴリーは、カテゴリーIDに - を付ける(複数の場合はカテゴリーIDを , で区切る)
'category' => '',,
// 指定した投稿IDの投稿(複数の場合は投稿IDを , で区切る)
'include' => '',
// 指定した投稿IDの投稿を除外(複数の場合は投稿IDを , で区切る)
'exclude' => '',
// 指定した投稿IDが、親の投稿IDの場合
'post_parent' => '',
// クエリに関するフィルター処理を行わない場合はtrue、フィルター処理を行う場合はfalseを指定
'suppress_filters' => true
);
$my_posts = get_posts( $args );
?>
カスタムフィールド関連
カスタムフィールド関連のパラメータです。下記で指定してあるパラメータはデフォルトの値となります。
<?php
$args = array(
// 指定したカスタムフィールドのキー名を持つ投稿
'meta_key' => '',
// 指定したカスタムフィールドの文字列の値を持つ投稿
'meta_value' => '',
);
$my_posts = get_posts( $args );
?>
今回、紹介した関数やパラメータなどの詳細は、以下の参考サイト・書籍を確認してみてください。