「カレンダー」ウィジェットで指定した年月を初期表示する方法

Cocoonカスタマイズ集
この記事は約2分で読めます。
記事内に広告が含まれています。

はじめに

WordPress標準の「カレンダー」ウィジェットの初期表示は、通常「現在」のカレンダーをしか出力できません。

そこで、ショートコードを使ってグローバル変数を制御することで、任意の年月のカレンダーを初期表示できるようになります。

この記事では、この方法について説明します。

完成イメージ

2026-07
月 火 水 木 金 土 日
 12345
6789101112
13141516171819
20212223242526
2728293031  

使用方法

以下にショートコードを示します。

[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;
});

さいごに

今回紹介した方法を使えば、標準機能では対応していない過去や未来の任意の月のカレンダーを、好きなページへ手軽に埋め込むことが可能になります。

タイトルとURLをコピーしました