WordPress制作、カスタマイズ、Webシステム開発とSEO対策

WordPress「最新情報」欄の決定版! ページの更新情報とポストの投稿を合成して出力する

一般的な企業サイトには、必ずといっていいほどある「最新情報」欄。
「○月×日 ○○のページを更新しました」とか「○月×日 新製品のお知らせです」というもの。

しかしこの「○○のページを更新しました」というのが曲者なんですよね。

「ページを更新した」という情報は最新情報として伝えたいものの、そのためだけにわざわざ投稿を作成するのも面倒くさいし、その投稿の詳細ページが「○○のページを更新しました(リンク)」だけになってしまうのは間抜けだし、かと言って他に書くべきことも見当たらない。

そんなジレンマを解決する方法がこちらです。
ページの更新情報と、ポストの投稿を合成して、「最新情報」欄に出力します。
「投稿」はこれまでどおり投稿のシングル詳細ページに飛ぶけど、ページの更新情報はそのままページヘのリンクになるという仕組み。

最終形コード

<h4>更新状況</h4>
<?php
$posts = get_posts('numberposts=5&post_type=any&orderby=modified');
if ($posts) {
echo '<ul>';
foreach($posts as $post): setup_postdata($post); ?>
<li><date><?php the_modified_date('Y年m月d日'); ?></date> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php if(get_post_type() == 'page'){
    echo 'のページを更新しました。';
  }elseif(get_post_type()=='wptech'){
    echo 'の技術情報を追加しました。';
  } ?></li>                                                                                                     
<?php endforeach;
echo '</ul>';
 }
?>

こんなふうに表示されます

更新状況

2013年02月24日 よくある質問のページを更新しました。
2013年02月24日 WordPressの使い方のページを更新しました。
2013年02月23日 更新日時の取得方法の技術ページを追加しました。
2013年02月23日 移転リニューアルいたしました
2013年02月23日 サンプルページのページを更新しました。

せっかちな方は上記コードをコピーして持って行っていただくとして、順を追って何をやったか解説しますので、お時間のある方はお付き合いください。

まずはget_posts

まずは、get_posts関数で、引数に「post_type=any」を指定してすべてのpostを引っ張ってきます。

$posts = get_posts('numberposts=5&post_type=any&orderby=modified');

そしたらそれをforeachで展開。

if ($posts) {
echo '<ul>';
foreach($posts as $post): setup_postdata($post); ?>
<li><date><?php the_date('Y年m月d日'); ?></date> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>                                                                                                      
<?php endforeach;
echo '</ul>';
 }

これでこんなふうに表示されます。

更新状況

2011年06月05日 よくある質問   ←ページ
2011年06月05日 WordPressの使い方 ←ページ
2013年02月23日 更新日時の取得方法  ←カスタム投稿タイプ
2013年02月23日 移転リニューアルいたしました  ←ポスト
2013年02月23日 サンプルページ  ←ページ

あれ、でもなにか変ですね?
そう、日付部分にthe_dateやthe_timeを使うと、そのページ/投稿の投稿日時が表示されてしまうのでおかしな具合になってしまいます。
じゃあ更新日時を$post->post_modifiedで取得して…と考えそうになりますが、実はちゃんと更新日時を取得するWordPress関数が用意されています。

日付を更新日時基準にする

the_modified_dateで更新日時をセット

$posts = get_posts('numberposts=5&post_type=any&orderby=modified');
if ($posts) {
echo '<ul>';
foreach($posts as $post): setup_postdata($post); ?>
<li><date><?php the_modified_date('Y年m月d日'); ?></date> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>                                                                                                      
<?php endforeach;
echo '</ul>';
 }

更新状況

2013年02月24日 よくある質問   ←ページ
2013年02月24日 WordPressの使い方 ←ページ
2013年02月23日 更新日時の取得方法  ←カスタム投稿タイプ
2013年02月23日 移転リニューアルいたしました  ←ポスト
2013年02月23日 サンプルページ  ←ページ

これで日付がちゃんと最新のものになりました。

ページの更新の後ろに文章をくっつける

あとは、ページの更新情報のところがページタイトルだけで無愛想なので、
「ページの時は後ろに『のページを更新しました』をくっつける」
という手当をしてあげれば完璧です。

get_post_type()でページか投稿かカスタム投稿タイプかを取得して表示を分けます。

<h4>更新状況</h4>
<?php
$posts = get_posts('numberposts=5&post_type=any&orderby=modified');
if ($posts) {
echo '<ul>';
foreach($posts as $post): setup_postdata($post); ?>
<li><date><?php the_modified_date('Y年m月d日'); ?></date> <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
<?php if(get_post_type() == 'page'){
    echo 'のページを更新しました。';
  }elseif(get_post_type()=='wptech'){
    echo 'の技術情報を追加しました。';
  } ?></li>                                                                                                     
<?php endforeach;
echo '</ul>';
 }
?>

更新状況

2013年02月24日 よくある質問のページを更新しました。
2013年02月24日 WordPressの使い方のページを更新しました。
2013年02月23日 更新日時の取得方法の技術ページを追加しました。
2013年02月23日 移転リニューアルいたしました
2013年02月23日 サンプルページのページを更新しました。

カスタム投稿タイプのところの「wptech」というのは、当サイトでのスラッグ名なので、使用環境に応じて適宜書き換えてお使いください。
それでは。

コメントを残す