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(
    '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関数は、パラメータに基づいた投稿データの配列を取得します。

今回の例では、ソースコード9行目で、get_posts関数のパラメータを、投稿の取得件数が3件、ソート順はランダムとしています。

それにより、サブループで使用したいカスタムクエリの投稿データの配列を取得します。

setup_postdata()

setup_postdata関数は、パラメータに指定した投稿データを各種のグローバル変数へセットします。

get_posts関数で取得した投稿データには、デフォルトでは利用できない投稿データ(the_contentや ID など)があります。そのため、そういった投稿データを利用するには、setup_postdata関数を以下の通り使用する必要があります。

setup_postdata関数のパラメータに投稿データを指定し、各種のグローバル変数へセットすることで、get_posts関数では取得できない投稿データ(the_contentや ID など)の利用が可能になります。

今回の例ではコード14行目で、setup_postdata関数のパラメータに、get_posts関数で取得したカスタムクエリの投稿データ$postをセットしています。

wp_reset_postdata()

wp_reset_postdata関数は、グローバル変数へセットされたカスタムクエリの投稿データを、メインクエリの投稿データに戻します。それにより、メインループで使用するメインクエリの投稿データを、テンプレートタグなどで、正しく利用することができます。

今回の例では、コードの27行目で、wp_reset_postdata関数を使用し、グローバル変数をメインクエリの投稿データに戻します。

get_posts()の主なパラメータ

以下は、get_posts関数で指定できる主なパラメータの例となります。

表示・順序関連

表示・順序関連のパラメータです。下記で指定してあるパラメータはデフォルトの値となります。

<?php 
$args = array(
	// 取得する投稿の件数
    '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 ); 
?>

今回、紹介した関数やパラメータなどの詳細は、以下の参照サイト・書籍を参考にしてみてください。

参照サイト・書籍

コメントまたはTwitterで返信

コメントは、以下の項目(*は必須項目)を入力し「コメントを送信」ボタンから送信お願いします。メールアドレスは公開されることはありません。Twitterで返信する場合はコチラから。