2011年10月20日

wordpress固定ページに新着投稿を一覧表示する方法

wordpress固定ページに新着投稿を一覧表示する方法ってことでどんなことかというと、
前から企業サイトを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の設定まで全てやっといたほうが楽。

少しでも参考になればコメント下さい。
posted by いくき at 12:03| Comment(0) | wordpress | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
×

この広告は90日以上新しい記事の投稿がないブログに表示されております。