前から企業サイトをwordpressで作る際に、TOPページ(固定ページ)内にいわゆる「新着情報」を自動で一覧表示(投稿日+記事タイトル)させたいなと思っていました。
ただ、いくら探してもプラグインなどは無いし、ほとんどが、index.php(wp側で参照順位的に優先されるホームページ)を直接phpをいじって表示する方法しかなかったからです。
私の場合はいつも、固定ページ投稿でTOPページを作って管理画面からそのページをTOPページとして設定してあげる方法で作っており、index.phpは投稿系での表示(例:アーカイブやカテゴリのTOPページ扱い)をしているので、そこをTOPページに出来ない状態ですし、それをやってしまうとページ毎の親子関係が上手くいかないため、パンくずのプラグインが利用できないなどの問題もありました。
ですので、今回はworpressのfunction.phpを利用してHTML投稿でのショートコードを作って解決してみました。
まずは、function.phpに書いたソースコード
function getPost() {
global $post;
$oldpost = $post;
$myposts = get_posts('numberposts=20&order=DESC&orderby=post_date');
$retHtml="<ul>";
foreach($myposts as $post){
setup_postdata($post);
$retHtml.='<li class="info_area"><span class="date">';
$retHtml.= get_post_time("Y年m月d日");
$retHtml.= '</span><span class="info"><a href="'.get_permalink().'">';
$retHtml.= the_title("","",false);
$retHtml.= '</a></span></li>';
}
$retHtml.='</ul>';
$post = $oldpost;
return $retHtml;
}
add_shortcode("getpost", "getPost");
*上記コード無いの<>は大文字になってます。
簡単に説明すると、
・$postはグローバルで使ってるため、一旦退避してあげないと他のところで不具合を引き起こすらしい(仕様)
・get_posts()関数を利用(これは有名な関数w)()内にパラメータを指定ここに書いてある以外にも、特定カテゴリやオフセットなどSQL的な条件指定が出来る。⇒get_postsで検索!
・$retHtmlはhtmlとして吐き出すための変数。ulとかliタグなど入れたいところに必要なタグやCSSのセレクタを書いてあげる。
・setup_postdata()は$postを上手いこと取得できるように変換している(多分)
・get_post_time()で投稿時間を取得して、表示したいようにフォーマットします。(the_time()とかthe_date()もあるけど、使ったら思い通りの場所に表示されなかった。get_post_timeだと上手く表示された。。。)
・後は退避していた$postを元に戻して、$retHtmlを戻り値として返す。
ここまでが、ショートコードのファンクションです。
add_shortcode("getpost", "getPost");は「getpost」っていうショートコードを設定しますよって意味。getPostはファンクション名(同一名で分かりづらくてすみません)
この記述でショートコード[getpost]が使えるようになる。
後は[getpost]をwp固定ページ投稿で挿入したい場所に挿入するだけ。
めっちゃ簡単。。。(ここまでやるのに3時間かかったけど・・・)
ポイントは、htmlとしての挿入になるのであらかじめ、htmlでサンプルを記述して、cssの設定まで全てやっといたほうが楽。
少しでも参考になればコメント下さい。
【関連する記事】

