はじめに
WordPress標準の「カレンダー」ウィジェットの初期表示は、通常「現在」のカレンダーをしか出力できません。
そこで、ショートコードを使ってグローバル変数を制御することで、任意の年月のカレンダーを初期表示できるようになります。
この記事では、この方法について説明します。
完成イメージ
使用方法
以下にショートコードを示します。
[my_calendar]
| オプション | 説明 | 値 | 初期値 |
|---|---|---|---|
| year | 年 | 初期表示したい年を指定 | 現在年 |
| month | 月 | 初期表示したい月を指定 | 現在月 |
実装手順
以下のコードをfunctions.phpに追加します。
add_shortcode('my_calendar', function ($atts) {
$atts = shortcode_atts([
'year' => date('Y'), // 省略時は今年を取得
'month' => date('n'), // 省略時は今月を取得
], $atts);
$target_year = (int) $atts['year'];
$target_month = (int) $atts['month'];
// 不正な年月は処理対象外として終了
if ($target_year < 1 || $target_month < 1 || $target_month > 12) {
return 'パラメータが正しくありません。';
}
global $monthnum, $year, $m;
// 現在の値を取得
$orig_monthnum = $monthnum;
$orig_year = $year;
$orig_m = $m;
$monthnum = $target_month;
$year = $target_year;
$m = '';
// 指定年月のカレンダーを取得
$calendar_html = get_calendar(true, false);
// グローバル変数を元の値に変更
$monthnum = $orig_monthnum;
$year = $orig_year;
$m = $orig_m;
return $calendar_html;
});
さいごに
今回紹介した方法を使えば、標準機能では対応していない過去や未来の任意の月のカレンダーを、好きなページへ手軽に埋め込むことが可能になります。

