SOFTELメモ Developer's blog

会社概要 ブログ 調査依頼 採用情報 ...
てるてる動画

【WordPress】固定ページでカテゴリごとの投稿一覧を表示したい

問題

固定ページの中で、あるカテゴリに所属する投稿一覧と、あるカテゴリに所属する投稿一覧と……を表示したい。

wordpress-shortcode-example

答え

通常通り固定ページの中に、ちょっとしたプログラムが必要な処理を入れるなら、ショートコードを作ると簡単。

というわけで、指定した条件の投稿を一覧表示するショートコード。

ソース

function shortcode_get_posts($atts) {
	extract(shortcode_atts(array(
		'q' => '',
	), $atts));

	$posts = get_posts(html_entity_decode($q));

	$html = '<ul>';
	foreach ($posts as $p) {
		$html .= '<li>';
		$html .= date('Y年n月j日 ', strtotime($p->post_date));
		$html .= '<a href="' . get_permalink($p->ID) . '">' . $p->post_title . '</a>';
		$html .= '</li>';
	}
	$html .= '</ul>';

	return $html;
}
add_shortcode('get_posts', 'shortcode_get_posts');

使用例

<div class="news">[get_posts q="category=3&numberposts=5"]</div>
<div class="press">[get_posts q="category=5&numberposts=5"]</div>

<div class="newitem">[get_posts q="post_type=item&numberposts=8"]</div>

ショートコードは、「wpautop() および wptexturize() による投稿の整形適用後にパースされます。」とのこと。ショートコードの処理をする関数の方では、パラメータが「category=3&#038;numberposts=5」のような文字列になっている。整形される前の文字が欲しかったら、元に戻す処理(html_entity_decodeなど)をする。

日付、リンク、タイトル以外にも出力可能。

出力されるHTMLは適宜変更してご利用されたし。

関連するメモ

コメント