Skip to content

SC-012 カレンダーショートコード

概要

  • 年別・月別カレンダーを表示するショートコード。
  • 1クラス(CalendarShortCode)で複数タグ・複数モードを処理するShortCodeServiceProvider がタグとモードの組み合わせごとにインスタンスを生成して登録する。
  • calendar* の typo 版として calender* エイリアスも全タグに自動登録される(既存投稿の誤記への後方互換)。

外部インターフェース

ショートコードタグ一覧

タグ名typo エイリアスモード定数動作
calendar2022calender2022MODE_YEAR_20222022年固定で年別カレンダーを表示
calendar2023calender2023MODE_YEAR_20232023年固定で年別カレンダーを表示
calendarcalenderMODE_YEAR指定年(省略時: 当年)の年別カレンダーを表示
Cale2_MakeCalender—(calendar 始まりでないためエイリアスなし)MODE_MAKE_CALENDAR指定年月のカレンダーを生成・表示
MakeCalenderDays—(同上)MODE_MAKE_CALENDAR_DAYS指定年月の日付一覧カレンダーを生成・表示

属性一覧(モード別)

calendar タグ(MODE_YEAR)

属性役割必須
year表示対象年(2020〜2030。省略時: 当年)
  • 入力例: [calendar year="2024"]

Cale2_MakeCalender(MODE_MAKE_CALENDAR)

属性役割必須
year表示対象年(2020〜2030。省略時: 当年)
month表示対象月(1〜12。省略時: 当月)
  • 入力例: [Cale2_MakeCalender year="2024" month="1"]
  • 表示: 常に日付グリッド+ホール別示唆画像(フル表示)。show_images 属性は受け付けない

MakeCalenderDays(MODE_MAKE_CALENDAR_DAYS)

属性役割必須
year表示対象年(2020〜2030。省略時: 当年)
month表示対象月(1〜12。省略時: 当月)
show_images1 / true / yes でホール別示唆画像を表示。0 / false / no で非表示。省略時はコンテキスト依存(下記)
  • 入力例: [MakeCalenderDays year="2024" month="1"]
  • 本文内デフォルト(Issue #2097): 過去の日別記事(通常投稿 post の本文) や、シングル表示で the_content フィルター適用中の本文断片では、省略時 ホール別示唆画像は表示しない(日付グリッド+月別ナビのみ)。ホール間に複数挿入されてもレイアウトが重くならないようにする。フル表示が必要な場合は show_images="1" を指定する。一覧・専用ページなど本文外では従来どおり画像あり。
  • キャッシュ: カスタム投稿 daily_article の考察フィールド向け the_content 結果は Transient にキャッシュされる(Issue #1714、キー接頭辞 daily_article_tc_v3_)。通常投稿本文は WordPress 標準の投稿キャッシュに依存する。
  • コンテキスト判定: MakeCalendarDisplayContextdoing_filter( 'the_content' ) かつ is_singular() を主判定とする(post タイプの過去記事が対象)。daily_article テンプレートの do_shortcode() 経路は DailyArticleTemplateExecutionService / DailyArticleTemplateContent から明示スタックで補う。
  • 本文外: 日別記事以外のページでは省略時も従来どおり画像あり。

挙動の分離(Issue #2097)

タグ日付グリッド月別ナビホール別示唆画像show_images
Cale2_MakeCalenderあり(初期展開)あり常にあり非対応
MakeCalenderDaysあり(初期閉)あり通常投稿本文・the_content 内は省略時なし / それ以外はあり対応

共有 Twig make_calendar.twig を変更する場合は、両タグの PHPUnit 回帰テストCalendarViewTest の Cale2 / MakeCalenderDays ケース)を必ず更新すること。

calendar2022 / calendar2023(MODE_YEAR_2022 / MODE_YEAR_2023)

属性なし(年はコード側で固定)。

エラー

条件ユーザー向け挙動メッセージ / ログ
year が数値でないバリデーションエラーメッセージ表示(esc 済)ValidationException年は数値で指定してください。
year が 0バリデーションエラーメッセージ表示(esc 済)ValidationException年は0以外の数値で指定してください。
year が 2020〜2030 の範囲外バリデーションエラーメッセージ表示(esc 済)ValidationException(範囲不正メッセージ)
month が数値でない / 範囲外バリデーションエラーメッセージ表示(esc 済)ValidationException月は1から12の間で指定してください。
コントローラーの Throwableエラーが発生しました:execute_if_not_adminerror_log(先頭 [ShortCodeHelper]

更新不可とみなすもの(git管理外の内容に依存し、リポジトリだけでは追従できない依存)

  • タグ名 calendar2022, calendar2023, calendar, Cale2_MakeCalender, MakeCalenderDays を変更しない
    • 理由: 既存投稿本文にショートコードタグが直書きされているため
  • typo エイリアス calender2022, calender2023, calender を削除しない
    • 理由: 既存投稿本文に誤記が直書きされているため(後方互換)
  • 属性名 year / month を変更しない
    • 理由: 既存投稿本文に属性名が直書きされているため
  • 年の許容範囲上限 MAX_YEAR = 2030CalendarConverter)は、範囲を縮小しない
    • 理由: 既存投稿の year 属性値が範囲内である前提で作成されているため