Appearance
SC-005 デイリー記事上部表示ショートコード
概要
- 日別記事ページの上部に「月別リンクカレンダー」と「誕生日ピックアップ(キャラ・声優)+ 関連機種台数・結果テーブル」を埋め込み表示する。
- 2023 年 3 月以降の日別記事に毎日使用してきた。
- 2026年5月以降の日別記事カスタム投稿のテンプレートによる運用では、
[MakeArtist20230318]は使用せず、[MonthlyLinkByYear]と[BirthDayMachinePickUp]の2ショートコードを並べる(分割タグの契約は SC-013 月別リンク・SC-014 誕生日機種ピックアップ を参照) MakeArtist20230318はyear/month/dayを受け取り、指定日の誕生日データと月別リンクを 連結して レンダリングする。- 誕生日データが取得できない日は月別リンクカレンダーのみを出力する(誕生日セクション全体を非表示)。
halls属性でホールを絞り込むと、指定ホールの誕生日機種データ(台数・差枚・回転数)だけを表示できる。hallsを指定しなかった場合はhalls="island,esupsu,bigapple"と同義とする。※旧記事の表示を崩さないため
外部インターフェース
ショートコードタグ
- タグ名:
[MakeArtist20230318] - 入力例:
[MakeArtist20230318 year="2024" month="3" day="18"] - 入力例(ホール絞り込みあり):
[MakeArtist20230318 year="2024" month="3" day="18" halls="island,espasu"]
属性一覧(MakeArtist20230318)
| 属性 | 役割 | 必須 |
|---|---|---|
year | 対象年(整数、2020〜2100) | ○ |
month | 対象月(整数、1〜12) | ○ |
day | 対象日(整数、1〜31、かつ checkdate で存在確認) | ○ |
halls | 誕生日機種データのホール絞り込み(任意)。有効スラッグをカンマ区切りで指定: island / espasu / bigapple / uno。省略時は island / espasu / bigapple に固定(過去記事互換。MakeArtist20230318ShortCode が既定を適用)。 | — |
バリデーションは MakeArtist20230318Converter が担当し、問題があると ValidationException をスローする。
レンダリング経路(実装メモ)
AbstractShortCode::render()は、まずshould_execute()で実行可否を判定する。管理画面(is_admin())ではここが偽となり 空文字を返し、handle()は呼ばれない。- フロントでは
ShortCodeHelper::execute_if_not_admin()がhandle()の実行を包み、ValidationExceptionのメッセージ表示や、その他例外の固定エラー文言・error_log出力を担う(管理画面での空文字返却そのものは、上記のshould_execute()側が先に制御する)。
エラー
| 条件 | ユーザー向け挙動 | メッセージ / ログ |
|---|---|---|
year が未指定・非数値・範囲外(2020 未満 / 2100 超) | ValidationException メッセージをそのまま表示(esc_html 済み) | 「年は数値で指定してください。」/「年は2020から2100の間で指定してください。」 |
month が未指定・非数値・範囲外(1 未満 / 12 超) | 同上 | 「月は数値で指定してください。」/「月は1から12の間で指定してください。」 |
day が未指定・非数値・範囲外(1 未満 / 31 超) | 同上 | 「日は数値で指定してください。」/「日は1から31の間で指定してください。」 |
| 日付の組み合わせが存在しない(例: 2月30日) | 同上 | 「指定された日付は存在しません。」 |
halls に無効なスラッグが含まれる | 同上 | 「halls に無効なホール指定があります(island, espasu, bigapple などの英字スラッグをカンマ区切りで指定してください)。」 |
Controller・Service・View 内での \Throwable | 'エラーが発生しました:execute_if_not_admin' を表示 | error_log(先頭 [ShortCodeHelper] + 例外クラス名・メッセージ・ファイル・行番号) |
管理画面(is_admin() === true) | 空文字を出力(非表示) | — |
| 誕生日データが存在しない日 | 月別リンクカレンダーのみ表示(誕生日セクション非表示) | — |
更新不可とみなすもの(git管理外の内容に依存し、リポジトリだけでは追従できない依存)
過去・現在の日別記事の 投稿本文 に埋め込まれたショートコード文字列は git 管理外のため、ここを変えると表示・ショートコード解釈が一斉に壊れる。Breaking change として扱うのは主に次の「呼び出し側のキー」に限る。
- ショートコード名
MakeArtist20230318を変更しない- 理由: 2023 年 3 月以降の全日別記事の投稿本文に文字列が直書きされているため。
- 属性名
year/month/day/hallsを変更・削除しない- 理由: 同上。過去投稿の属性名が書き換わらないため。