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関数は、パラメータで指定した投稿データを配列で取得します。

例では、ソースコード4行目からの箇所で、サブループで使用する投稿データをget_posts関数で取得しています。パラメータには、投稿記事を3件表示し、表示順はランダムとして指定しています。

setup_postdata()

get_posts関数で返された投稿データを利用し、テンプレートタグで投稿データを取得する際、そのままでは取得できない場合(the_contentなど)があります。そのため、setup_postdata関数を利用します。

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

それにより、取得できなかった投稿データ(the_contentなど)の利用が可能になります。また、パラメータの変数名には$postしか利用できません。

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

wp_reset_postdata()

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

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

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 ); 
?>

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

参考サイトなど

コメント投稿またはTwitterで返信

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

また、コメントは承認制となります。