突然ですが、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」にすれば、カスタム投稿のリスト化も可能です。
多ジャンルのサイトなどで重宝すると思います。
固定ページのテンプレートに設定すると、テンプレートの中がかなり煩雑になりますので、このショートコードを使うといろいろスッキリして便利です!
コメントを残す