Skip to content

SC-005 デイリー記事上部表示ショートコード

概要

  • 日別記事ページの上部に「月別リンクカレンダー」と「誕生日ピックアップ(キャラ・声優)+ 関連機種台数・結果テーブル」を埋め込み表示する。
  • 2023 年 3 月以降の日別記事に毎日使用してきた。
  • 2026年5月以降の日別記事カスタム投稿のテンプレートによる運用では、[MakeArtist20230318]は使用せず、 [MonthlyLinkByYear][BirthDayMachinePickUp] の2ショートコードを並べる(分割タグの契約は SC-013 月別リンクSC-014 誕生日機種ピックアップ を参照)
  • MakeArtist20230318year / 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 を変更・削除しない
    • 理由: 同上。過去投稿の属性名が書き換わらないため。