WordPress 2つの条件があるクエリを結合して表示させる

投稿の特定のカテゴリーと、カスタム投稿タイプの特定のタームをまとめて表示させたい場合ありますよね。一度get_posts関数でそれぞれの投稿を取得してから二つを結合しています。その後に最新順に並べて最新5件まで表示させるように成形しています。

<?php
$args1 = array(
	'post_type'      => 'post',
	'posts_per_page' => 5,
	'orderby'        => 'date',
	'cat'            => 6
);

$args2 = array(
	'post_type'      => 'custom-post',
	'posts_per_page' => 5,
	'tax_query' => array(
		array(
			'taxonomy' => 'custom-post-taxonomy',
			'field'    => 'slug',
			'terms'    => 'term-name',
		),
	)
);

$posts1 = get_posts( $args1 );
$posts2 = get_posts( $args2 );

// 結果をマージ
$merged_posts = array_merge($posts1, $posts2);

// 最新順にソート
usort($merged_posts, function($a, $b) {
	return strcmp($b->post_date, $a->post_date);
});

// 最新5つまで抽出
$merged_posts = array_slice($merged_posts, 0, 5);
?>

<?php if ( !empty( $merged_posts ) ) : ?>
	<?php foreach ( $merged_posts as $post ) : ?>
		<div><?php the_title(); ?></div>
	<?php endforeach; ?>
	<?php wp_reset_postdata(); ?>
<?php endif; ?>

石井秀幸@WEBデザイナー
WordPress公式『横浜 WordPress Meetup』主宰/株式会社ノクチ基地 取締役/モンゼンクリエイティブ合同会社 代表。WEB制作に関する技術や役立つ情報を発信していきます。10年にわたるWordPress歴を背景に、幅広いアイデアを形にするお手伝いをしています。