非推奨のquery_postsを使わずget_postsでカスタム投稿タイプの一覧を表示させる

非推奨のquery_postsを使わずget_postsでカスタム投稿タイプの一覧を表示させるのアイキャッチ画像

ブログとは別に新着情報や事例をカスタム投稿タイプで制作し、トップページにその一覧を表示したいって用件は企業サイトなどを構築していれば、よくあることだと思われます。 query_postsを使えば結構手軽に実装できるんだけども、非推奨なのでget_postsを使って任意の場所にカスタム投稿タイプの一覧を表示してみます。

get_postsを使ってカスタム投稿タイプの一覧を表示する方法

posts_per_pageが表示件数、post_typeが投稿タイプ名です。例の場合はnewsという投稿タイプ名です。

ソース例

<?php $args = array(
	'posts_per_page'   => 5,
	'orderby'          => 'date',
	'order'            => 'DESC',
	'post_type'        => 'news'
);
$posts_array = get_posts( $args ); ?>
<?php foreach ( $posts_array as $post ) : setup_postdata( $post ); ?>
<dl>
<dt><?php the_time('Y年m月d日'); ?></dt>
<dd>
<?php
$newsposttit = strip_tags($post->post_title);
$nplimit = '50';//文字数制限
?>
<a href="<?php the_permalink(); ?>">
<?php if(mb_strlen($newsposttit)>$nplimit) { 
$title= mb_substr($newsposttit,0,$nplimit) ; 
echo $title. '...' ;} 
else {echo $newsposttit;} ?>
</a>
</dd>	
</dl>
<?php endforeach; wp_reset_postdata(); ?>

タイトル箇所は普通にthe_title()でOKです。例では文字数制限をかけています。

get_postsを使ってタームの一覧を表示する方法

上記例にtax_queryを追加するとタームの一覧を表示させることができます。以下の場合はタクソノミがnewscatでタームがimportant-infoの場合

ソース例

<?php $args = array(
	'posts_per_page'   => 5,
	'orderby'          => 'date',
	'order'            => 'DESC',
	'post_type'        => 'news',
	'tax_query' => array(
		array(
			'taxonomy' => 'newscat', 
			'field' => 'slug', 
			'terms' => 'important-info' 
			)
		)
);
$posts_array = get_posts( $args ); ?>

カスタム投稿タイプのややこしい呼び名

僕が初めてカスタム投稿タイプを導入した時、タクソノミやタームなどのややこしい呼び名に戸惑いましたが普通の投稿に例えて考えれば理解しやすいです。 今回の例に通常の投稿のカテゴリスラッグはdayと仮定すると以下のような関係になります。

投稿タイプ通常の投稿カスタム投稿タイプ
スラッグpostnews
カテゴリcategorynewscat(タクソノミ)
カテゴリスラッグdaynewscat(ターム)

いやぁ〜なんかWordPress楽しい!