本サイトを始めて初めて月が替わりました。
書庫(アーカイブ)に表示している標準のカレンダーなのですが、当然月初なので何も投稿は無い状態になる訳ですが、前月の2月をクリックすると、なんと月別アーカイブのページになりますがこれが普通なのでしょうか?…
古い考え方ではありますが…
月が替わった時に真っ白な状態が見れても「誰も嬉しくないのでは?」と思います。
それならば先月のカレンダーを表示してくれた方が良いと思うのは古考人(古い考え方の人)だからでしょうか?
そもそもアーカイブのカレンダーは通りすがりの読者にはあまり興味がない情報であることは確かです。
唯一の利用者は記事を書いている作成者であることは間違えありません。
ただ考古人としては、前月をクリックしたら、前月のカレンダーが表示されて欲しかったのです。
それが叶わないとするならば、せめて前月と今月の2カ月のカレンダーを表示して欲しいと思いました。
2カ月表示のカレンダー機能を探す
「ワードプレス 2カ月カレンダー」で調べると、プラグインとか自作とか、いろいろな情報はでてくるのですが、 プラグインに関しては最近の更新がされていなかったり、自作の方もパッと見大変そうなものだったりして、それほど苦労してまで実装するべきなのか疑問を感じてしまいます。
ところで話はそれますが、この話はワードプレスの無料のテーマCocoonに関する話ではありません。
ただコードを追加するための環境としてはテーマに依存することになります。
それに加えてワードプレスの修正の話については、一つのカテゴリーにまとめておきたかったので、ここに置いています。
話を戻しますと、 wordPressの標準カレンダーを呼びだす関数が「wp-includes/general-template.php」の中に書かれている「get_calendar()」であるという事は下記のサイトから入手することができました。
それで、「get_calendar()」ソースコードを見ていたところ、このような情報がないので、あまりやるべきではないのでしょうが、「get_calendar()」が使用するグローバル変数の「$monthnum,」と「$year」に前月の月と年をセットして、この関数を呼べば前月が表示されるであろうということが推察できました。
カレンダーショートコードの作成
そこで、いままでCocoonの推敲でいろいろと経験した内容をもとに、カレンダー「get_calendar()」を呼び出すショートコードを作成して見ました。
これであれば、もともとある関数を修正することなく機能を実装することができます。
Cocoonの子テーマのフォルダーの中にあるfunctions.phpに下記のコードを追記します。
//カレンダーショートコード add_shortcode('calendar-1', 'calendar_shortcode'); if ( !function_exists( 'calendar_shortcode' ) ): function calendar_shortcode( $atts, $content = null ) { extract( shortcode_atts( array( 'month' => 1, ), $atts ) ); ob_start(); global $monthnum, $year; $monthnum = date('m', strtotime(date('Y-m-1') . '-' . $month . ' month')); $year = date('Y', strtotime(date('Y-m-1') . '-' . $month . ' month')); get_calendar(); return ob_get_clean(); } endif;
修正内容としては特段難しいところはありませんが、一応、先付の月(翌月など)の指定は無い想定で、パラメータを設定することで1カ月前、2カ月前…と表示させる月を指定できるようにしました。
[calendar-1 month=1]
・先月であれば上記になります。先々月であればmonth=2という風に数字を増やして行きます。
※上記[]は全角になっていますので、そのままコピペはできません。
確認できる範囲ではありますが、WPの動作で日付がおかしなところは見当たらないので利用に耐えられるのではないか?と思っています。
以上、ご報告申し上げます。