【WordPress】年別記事一覧をテンプレートではなく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('');
 $retHtml.='</li>';
 $myposts = get_post_time('Y'); // 比較用の変数に年を代入
 endwhile;
 wp_reset_query();
 $post = $oldpost;
 return $retHtml;
 endif;
}
add_shortcode("YearList", "getYear");

22行目のこの部分↓は

$retHtml.=do_shortcode('');

このショートコードで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]で好きな場所に出せますね。

こんな感じで↓

2019年

2019/07/16【WordPress】マルチサイトの5.2.xアップデートで「Notice: wp_check_site_meta_support_prefilter…」

2019/06/12【WordPress】年別記事一覧で今年だけ月展開

2019/06/04リンクしたPDF等のファイルに自動でファイル名(アップロードした時のファイル名)も表示させる方法

2018年

2018/12/16【WordPress】年別記事一覧をテンプレートではなくfunctions.phpに書きたい

2018/11/28URLがTwitterで有害と判定されてしまったら

2018/10/26プラグインを使わずにダッシュボードにウィジェットを追加する

2018/10/12「#2 WP ZoomUP『2018年のフロントエンドのトレンドから見るコーディング事情』」に参加しました

2018/10/12「#2 WP ZoomUP『2018年のフロントエンドのトレンドから見るコーディング事情』」に参加しました

2018/10/01WP ZoomUPに参加しました。 #wpzoomup

2018/09/28WordCamp Tokyo 2018に行きました。 #wctokyo

2017年

2017/11/17jsもcssもenqueue(エンキュー)しよう!

2017/10/02右クリック禁止・ドラッグ操作禁止にする方法

2017/07/07Word Camp Kyoto 2017に行ってきました

2017/04/16(掲載ON/OFF付き)カスタムタクソノミ別記事一覧

2017/04/14.htaccessの内容が勝手に変わる

2017/03/01ユーザー別に管理画面項目を整理

2017/01/07年別記事一覧で「年が明けたら1件も記事が無い」を回避

2017/01/03カスタム分類を条件に記事一覧を取得し、アーカイブでタブ表示

2016年

2016/12/23get_postsだと「この投稿を先頭に固定表示」が無効

2016/12/22WordPressの記事およびメディアファイルにベーシック認証

2016/12/16年別記事一覧(今年だけフルオープン)

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

2016/12/08WordPressで分類別にベーシック認証

2016/11/22WordPressを翻訳してみよう(11/29追記)

2016/11/04カスタムフィールドテンプレートで表示切替

2016/09/28WordCamp Tokyo 2016に行ってきました

2016/04/13Concrete5.6.x以下でサイト内リンクが貼れないトラブルを解決

2016/03/31WordPressの記事一覧をHTMLページに表示

2016/01/13公開後1カ月以上経過したWordPressをマルチサイト化

2015年

2015/09/10【WordPress】Googleキャッシュと戦った話(Feed)

2015/08/13【WordPress】4.2.xへのバージョンアップでjQuery死んじゃったよ~って方

2015/07/17【WordPress】特定のターム(term)が指定された記事だけ一覧から除外

2015/06/05キャッシュのクリア

2015/05/18WordPress4.2.2のテーマカスタマイザーに項目追加

2015/03/13WordPress:西暦表示を和暦表示に変更

2015/03/13query_postsで記事一覧の期間を指定

2015/03/12カスタム投稿タイプの分類別一覧を年度毎に固定ページに表示

2015/02/05他のページの投稿記事をそのまま転載

2014年

2014/12/05【WordPress】投稿記事が1件も無ければテキストを表示する

2014/05/02コードメモ

2014/04/30hrefのリンクイベントを無効にするCSS

2014/04/24WordPress3.9とカスタムフィールドテンプレート2.2.1がIE9で変になる

2014/01/31【WordPress】プラグインを使わずに自動で抜粋記事から「続きを読む」にする方法!

2013年

2013/09/05【WordPress】タグで条件分岐

2012年

2012/09/12【WordPress】公開日表示と更新日表示

2012/08/29【WordPress:マルチサイト】親サイトで子サイトのカスタムメニューをウィジェット表示

2012/07/31【WordPress】ログイン判定(閲覧制限)

2012/07/23WordPressの条件分岐

この記事にコメントを残す