カテゴリーごとに最新投稿が含まれていれば「NEW」を表示するWordPressのショートコード
...[caption id=“attachment_364” align=“alignleft” width=“320”]
[/caption]自社のイントラをWordPressで再構築した際に、要望されたことのひとつに『サイドバーとして配置しているメニューのカテゴリー一覧に、カテゴリーごとに最新の投稿が含まれていたら「NEW」マークを表示して欲しい。』と言うのがありました。
そこで特定のカテゴリーを指定して、そのカテゴリーの投稿記事に最新のものが含まれていたらカテゴリー名の横に「NEW」マークを表示するというショートコードを作成してみましたのでここに共有しておきます。拡張機能としてカテゴリーの最新投稿数をカウントしてその件数を表示するということもできます(FaceBookのメニューなどで表示される最新未読アイコンみたいな感じの表示にすることもできます)。ショートコードを色々探してみたのですが、何気にWordPressで記事の一覧リストの横に「NEW」を表示するみたいなショートコードは数多くあるのですが、どれも記事リストに対しての最新判定ばかりで、カテゴリーに対しての最新判定というショートコードはめぼしいのが見つからなかったので、自作することにしました。
参考にしたのは星野邦敏氏のWordPressコミュニティで紹介されていた「WordPressでNew!を表示するパターン別4つの方法」という記事。氏のサイトでは、WordPressの企業サイトならではの要望やニーズに対してのTIPSが紹介されていてとてもためになりました。[php highlight=“2-37,38”] function addnew($attr, $content){ extract(shortcode_atts(array( ‘slug’ => ‘’, ’ttype’ => ‘pub’, ’term’ => 7, ‘vtype’ => ‘str’, ), $atts)); $today = date_i18n(‘U’); $ttype = ($ttype!=‘pub’) ? ‘mod’ : ‘pub’; $term = ($term!=7) ? intval($term) : 7; $vtype = ($vtype!=‘str’) ? ’num’ : ‘str’; $value = ($content!=’’) ? do_shortcode($content) : ’new’; global $post; $cats = get_category_by_slug($slug); if(!$cats){ return ‘’; }else{ $cat = $cats->term_id; if(!$cat) return ‘’; } $last_post_ids = array(); $lastposts = get_posts(‘category=’.$cat); foreach($lastposts as $lastpost) : $entry = ($ttype == ‘pub’) ? date_i18n(‘U’, strtotime($lastpost->post_date)) : date_i18n(‘U’, strtotime($lastpost->post_modified)); $interval = date(‘U’, ($today - $entry)) / (60 * 60 * 24); if(intval($term) > $interval){ $last_post_ids[] = $lastpost->ID; } endforeach; if(count($last_post_ids) > 0){ if($vtype == ‘str’){ $retstr = $value; }else{ $retstr = count($last_post_ids); } } wp_reset_query(); if($retstr != ‘’) return $retstr; } add_shortcode(‘addnew’, ‘addnew’); [/php]