投稿を取得して列挙するショートコードの作成方法【WordPress】

突然ですが、Wordpressサイト作成のとき「固定ページ内の特定の箇所に投稿の新着リストを設置したい!」というときありません?

しかし、固定ページや投稿の管理画面での編集では、PHPを記述しても作動しません。
そんなとき『ショートコード』が役立ちます。

ここでは、特定のカテゴリーの新着一覧を取得して表示させるためのショートコードの作り方を説明します。

ショートコードのためのソースは、functions.phpに下記のように設定します。

function add_new_list_func($atts){
	$str = '<ul>';
	global $post;
	$arg   = array(
		'posts_per_page' => 5, // 表示させる件数
    	'orderby'        => 'date', // 表示順の基準(日付)
    	'order'          => 'DESC', // 新しい順
    	'category'      => 'news', // カテゴリースラッグ
	);
	$posts = get_posts($arg);
	if($posts):
	foreach($posts as $post):
		setup_postdata($post);
		$str.='<li>';
		$str.='<time datetime="'.mysql2date('Y-m-d', $post->post_date).'">'.mysql2date('Y/m/d', $post->post_date).'</time>';
		$str.='<h3>'.the_title('','',false).'</h3>';
		$str.='<a href="'.get_permalink().'"></a>';
		$str.='</li>';
	endforeach;
	else:
		$str.='<li>';
		$str.='<time datetime="'.date('Y-m-d').'">'.date('Y/m/d').'</time>';
		$str.='<h3>現在お知らせはございません。</h3>';
		$str.='</li>';	
	endif;
	$str.='</ul>';
	wp_reset_postdata();
	return $str;
}
add_shortcode('add_new_list', 'add_new_list_func');

ソースの説明

方法としては、「$str」という変数を用意して、そこに詰め込まれたソースをリストとして表示する仕様となっています。

2行目:リストの種類を示すタグ<ul>を$strの最初に含ませます。

10行目:get_postsで対象の投稿を取得します。

11行目〜:もし対象の投稿が存在する場合の処理

12行目:取得した対象の投稿を「foreach」でひとつずつ$postに格納してソースを構成させます。

14行目〜:$strに、下記のようなHTMLを格納していきます。

<li><time datetime="0000-00-00">0000/00/00</time><h3>タイトル</h3><a href="投稿のURL"></a></li>

19行目:foreachでのループ処理終了

20行目〜:対象の投稿が存在しなかった時の処理

25行目:リスト処理の終了

26行目:最後の閉じるタグ</ul>を$strの最後に格納

という感じの内容です。

あとは、固定ページの編集画面で[add_new_list /]と入力すれば、完成です。

8行目の「category」を「post_type」にすれば、カスタム投稿のリスト化も可能です。

多ジャンルのサイトなどで重宝すると思います。
固定ページのテンプレートに設定すると、テンプレートの中がかなり煩雑になりますので、このショートコードを使うといろいろスッキリして便利です!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です