Skip to content

wordpressのサイドバーに指定したカスタム投稿の月別アーカイブを2年分だけ表示させたい

teratailに初カキコ…ども…

wordpressのカスタム投稿の月別アーカイブを2年分だけ表示させたいが、
投稿がない月がある場合は2年より前の月も表示されてしまって困ってる人、
他に、いますかっていねーか、はは
(懐かしい厨二コピペ 参考:[初カキコ…ども…とは (ハツカキコドモとは) 単語記事 – ニコニコ大百科])

ということでクライアントのニッチすぎて草が生える要望に応えるべく
初めてteratailで以上の質問をしました。

 

wordpressのサイドバーに指定したカスタム投稿の月別アーカイブを2年分表示させたい
(例:2015年11月-2017年11月のみ表示)

wp_get_archives で limit=24 とし、
2年分表示(例:2015年11月-2017年11月のみ表示)されると思いきや
投稿がない月はカウントされず、結果2015年11月よりも前の月のアーカイブも表示されてしまう。
単純に上から24ヶ月分表示されてしまう。

■例
limit = 5 (5ヶ月分)の場合、2017年6月以前は表示しないで欲しいのだが、
投稿が毎月コンスタントにない場合は

2017年11月
2017年10月
2017年9月
2017年1月
2016年12月

と表示されてしまう。

これをちゃんと
2017年11月
2017年10月
2017年9月
までにしたい。

 

こんな需要、ある?

別にいいじゃん、2年越えてもさ。ね。だから何?
って超絶O型人間の私は思うけどやらなきゃいけない。
あ〜あ、社畜の辛いとこね、ここ
(懐かしい厨二コピペ 参考:[初カキコ…ども…とは (ハツカキコドモとは) 単語記事 – ニコニコ大百科])

 

そしてすぐさま回答が来ました…
すごいよteratail…答えてくれた人本当にありがたやです…

 

getarchives_where フックを利用して、2年以上前の投稿を除外すればできますよ、とのこと。スッゲェ!

 

でも、書き方分かんねぇ!私コピペしか脳がないから!

で結局社内のプログラマさんからの知恵を拝借し、Google先生に頼り

出来たコードが

こ れ だ

 

【function.phpにこれをかく】


function my_custom_post_type_archive_where($where){
$where .= " AND DATE(post_date) >= '" . date( 'Y-m-d', strtotime( '-2 years' ) ) . "'";
$where .= " AND DATE(post_date) <= '" . date( 'Y-m-d', strtotime( '-0 days' ) ) . "'";
return $where;
}
add_filter( 'getarchives_where', 'my_custom_post_type_archive_where', 10, 2 );

 

strtotime( ‘-2 years’ )のとこを -3 yearsとかにすれば3年だし
( ‘-2 month’ )にすれば2ヶ月になる。

 

【表示したい側(sidebar.phpとか)】


wp_get_archives('type=monthly&show_post_count=true&limit=24&post_type=hogehoge’);

↑これは今回の私の場合なのでwp_get_archives使った表示方法ならなんでも。

 

これでちゃんと2年分だけ表示できたよ!
よかったー!

 

玄人は$argsに色々やって何年とかの指定をfunctionじゃなくテンプレ側でやれるようにしたりできるみたいだよ!

 

探してもなかなか出なかったから、
万が一他にも同じような人いたら役に立てれば良き…。

どうやって検索するだろ?
月別アーカイブ ○年分だけ
月別アーカイブ ○年以降 除外
WordPress 指定期間
wp_get_archives limit 超えちゃう  ???

 

参考URL:

One Comment

  1. なかしま なかしま

    めっちゃ 役に立ったよ ありがとう

    そのままコピペで動きました

    需要あると思います

    カスタム投稿って、ニュース的なものに使われることがよくあるので、運用が長くなったらどうしてもドロップダウンリストが汚れてしまいます
    なので2年程度で消したいんですよね 美意識ってやつです

    感謝

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です