(年別)記事一覧をテンプレートではなくfunctions.phpに書きたい

※段落ごとにリンクを吐くより、リスト形式の方が利用頻度高いですよねと思い直して修正しました(2016.12.15)

WordPressで年別の記事一覧を表示するにあたって、テンプレートファイルにphpで書く方法はやった事がありましたが、functionsに書いてショートコードで呼び出す方法はなかなか分からなかったので記録しておきます。

こんな感じで出力されるものを作る

<h4>2016年</h4>
<ul>
  <li>タイトルA</li>
  <li>タイトルB</li>
</ul>
<h4>2015年</h4>
<ul>
  <li>タイトルA</li>
  <li>タイトルB</li>
</ul>

テンプレートに直接書いて年別一覧を出す方法はこちらの記事を参考にさせて頂きました。
WordPress備忘録(月別記事一覧・年月別アーカイブ)
[解決済] カスタム投稿タイプ内で月別記事一覧

↑この記事を参考にテンプレートに直接書いて記事一覧を出す方法はできました。
でも今回はテンプレートは触らずショートコードで呼び出したかったので悩みました。
そして分かったのがコレ。

functions.phpに書くコード

function getYear() {
 global $post;
 $oldpost = $post;
 $myposts = query_posts(
array(
 'posts_per_page'=> '-1',
 'post_type' => 'post',
 'order'=>'DESC',
 'orderby'=>'date'
));
 if ( have_posts() ) :
 $retHtml='';
 $myposts = false; // 比較用の変数を初期化
 while ( have_posts() ) :
 the_post();
 if( $myposts != get_post_time('Y') ) : // 投稿年を比較
 if ( $myposts !== false ) : // 最初のループは除外。2回目以降で投稿年が異なれば閉じタグを出力
 $retHtml.='</ul>';
 endif;
 $retHtml.='<h4>'.get_post_time('Y年').'</h4><ul>';
 endif;
 $retHtml.='<li>'.get_post_time('Y/m/d').'</span><a href="'.get_permalink().'">'.the_title("","",false).'</a>';
 $retHtml.=do_shortcode('[NEW]');
 $retHtml.='</li>';
 $myposts = get_post_time('Y'); // 比較用の変数に年を代入
 endwhile;
 wp_reset_query();
 $post = $oldpost;
 return $retHtml;
 endif;
}
add_shortcode("YearList", "getYear");

22行目のこの部分↓は

$retHtml.=do_shortcode('[NEW]');

このショートコードで14日間Newマークを表示する様にしています↓

function getNEW() {$days=14;
$today=date('U');$entry=get_the_time('U');$diff1=date('U',($today - $entry))/86400;
if ($days > $diff1) {return "\n" . '<span class="red">NEW</span>' . "\n";}}
add_shortcode('NEW', 'getNEW');

これで、ショートコード[YearList]で好きな場所に出せますね。

こんな感じで↓

[Ylist]


Comments

コメントを残す