Appearance
SC-012 カレンダーショートコード
概要
- 年別・月別カレンダーを表示するショートコード。
- 1クラス(
CalendarShortCode)で複数タグ・複数モードを処理する。ShortCodeServiceProviderがタグとモードの組み合わせごとにインスタンスを生成して登録する。 calendar*の typo 版としてcalender*エイリアスも全タグに自動登録される(既存投稿の誤記への後方互換)。
外部インターフェース
ショートコードタグ一覧
| タグ名 | typo エイリアス | モード定数 | 動作 |
|---|---|---|---|
calendar2022 | calender2022 | MODE_YEAR_2022 | 2022年固定で年別カレンダーを表示 |
calendar2023 | calender2023 | MODE_YEAR_2023 | 2023年固定で年別カレンダーを表示 |
calendar | calender | MODE_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_images | 1 / 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 標準の投稿キャッシュに依存する。 - コンテキスト判定:
MakeCalendarDisplayContextはdoing_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_admin | error_log(先頭 [ShortCodeHelper]) |
更新不可とみなすもの(git管理外の内容に依存し、リポジトリだけでは追従できない依存)
- タグ名
calendar2022,calendar2023,calendar,Cale2_MakeCalender,MakeCalenderDaysを変更しない- 理由: 既存投稿本文にショートコードタグが直書きされているため
- typo エイリアス
calender2022,calender2023,calenderを削除しない- 理由: 既存投稿本文に誤記が直書きされているため(後方互換)
- 属性名
year/monthを変更しない- 理由: 既存投稿本文に属性名が直書きされているため
- 年の許容範囲上限
MAX_YEAR = 2030(CalendarConverter)は、範囲を縮小しない- 理由: 既存投稿の
year属性値が範囲内である前提で作成されているため
- 理由: 既存投稿の