Appearance
DailyArticlePostType - カスタム投稿タイプ「日別記事」の設定手順
概要
日別記事専用のカスタム投稿タイプ「daily_article」の機能一式です。
- 登録: 投稿タイプの登録(
register_post_type)、パーマリンク・リライトルール、REST メタ(kousatsu_date / halls / daily_article_events)の定義 - 管理画面: WordPressの標準装備の本文欄は使わず、ブロックエディタ上のメタボックスと post_meta で「考察日」「ホール」「イベント」「ホール別考察文」「絵文字」などを編集
- 公開時・表示: 公開時に db_Link_day 等への同期、フロント用テンプレートフック、サムネイル自動設定
前提条件
必要な環境
- WordPress 環境(本テーマが有効な状態)
- 子テーマの
functions.php等でmyCustom/connector.phpを読み込んでいること(本プロジェクト全体の前提)
テンプレートの登録(必須)
日別記事の単体表示では、TemplateHooks が single_template フィルターで固定テンプレートを指定するため、子テーマ側にテンプレートファイルの配置が必須です。
- 配置場所: 子テーマルートから見て
myCustom/myTemplate/single-daily-article-template.php(本リポジトリではmyTemplate/single-daily-article-template.phpとして管理しデプロイされる) - リポジトリ内の注意: ラッパーはルートの
myTemplate/のみを Git 管理する。myCustom/myTemplate/以下へ同ファイルを重複配置しない(リポジトリ直下が既にmyCustomのため二重になり、デプロイ先も誤る)。 - 役割: Template Name / Template Post Type を宣言し、
get_header()のあとでDAILY_ARTICLE_TEMPLATE_BODY_PATHで指定されたテンプレート本体をrequire、get_footer()で閉じるラッパー - 参照: DailyArticleTemplate README、
core_src/PostType/DailyArticle/Frontend/TemplateHooks.php
テンプレート解決と読み込みの流れは以下のとおりです。
※1 例:
/daily-article/YYYY-n-j/形式のURL※2 子テーマルート基準の
myCustom/myTemplate/single-daily-article-template.php(ラッパー。配置必須)
_wp_page_template(既存投稿)
定数 DAILY_ARTICLE_TEMPLATE_PATH を myCustom/myTemplate/single-daily-article-template.php に変更したことに伴い、既存の daily_article 投稿の post meta _wp_page_template に旧値 myTemplate/single-daily-article-template.php が残っている場合があります。
- フロント表示:
TemplateHooks::fix_template()はget_stylesheet_directory()と定数からファイルの実パスを組み立てるため、ラッパーが新パスに存在すれば表示は問題なくなります(meta が旧値のままでも可)。 - 管理画面での整合:
TemplateHooks::auto_set_template()は投稿保存時に_wp_page_templateが定数と異なれば新パスへ更新します。一括で揃えたい場合は WP-CLI のwp post meta update等での移行を検討してください。
core_src 外で必要な設定・配置
| 対象 | 場所・内容 |
|---|---|
| 日別記事用テンプレート | 子テーマルート基準で myCustom/myTemplate/single-daily-article-template.php を配置(上記「テンプレートの登録」参照。本リポジトリでは myTemplate/ 以下をデプロイで同期) |
| アプリの読み込み | 子テーマの functions.php 等で myCustom/connector.php を require(本テーマで myCustom を有効にするための設定) |
| デフォルトアイキャッチ(任意) | アイキャッチ未設定時に使う画像IDは ConstantsServiceProvider で DAILY_ARTICLE_DEFAULT_THUMBNAIL_ID(既定値 453)として定義。環境でメディアIDが異なる場合は、connector.php 読み込み前にこの定数を定義して上書き可能 |
投稿について
1. 投稿データの管理方式(post_meta)
日別記事の入力・保存は WordPress 標準の post_meta で行います。
- 基本情報メタ(
RestMetaRegistration.phpでregister_post_metaにより定義。投稿タイプはshow_in_restを false にしているため REST 経由の取得・保存は行われず、管理画面のメタボックス保存時に post_meta へ保存される):kousatsu_date- 考察日(Y-m-d)halls- ホール選択(カンマ区切り)daily_article_events- ホール別イベント(JSON)
- 管理画面専用メタ(ブロックエディタのメタボックスで編集、保存時に post_meta へ保存):
island_emoji,espasu_emoji,bigapple_emoji- 各ホールの絵文字テキスト(保存時に専用テーブルdb_daily_article_emojiへ同期)
- 引用元 URL(ホール別):
min_repo_source_urls— HallEnum の英語 value(例:island/espasu/bigapple)をキーとする引用元ページ URL のマップ。日本語のホール表示名をキーにする想定ではない。日別記事本文で日別記事結果を表示する処理などがget_post_metaで参照する。ショートコード設計(SC-001)のスコープ外であり、本投稿タイプの保存データとして扱う。
表示時は get_post_meta や専用テーブル経由で取得します(設計書: docs/_plans/daily-article-emoji-feature-design.md 参照)。
2. パーマリンクのフラッシュ
カスタム投稿タイプを登録した後、パーマリンクのリライトルールを更新する必要があります。
方法1: 自動フラッシュ(推奨)
コード内で自動的にフラッシュされるため、特に操作は不要です。管理画面への初回アクセス時に自動的に実行されます。
方法2: 手動フラッシュ
もし404エラーが発生する場合は、WordPress管理画面で以下の手順を実行してください:
- 「設定」→「パーマリンク設定」を開く
- 何も変更せずに「変更を保存」をクリック
- これにより、パーマリンクのリライトルールが更新されます
カスタム投稿タイプの特徴
- 投稿タイプ名:
daily_article - 表示名: 日別記事
- サポート機能: リビジョンのみ(タイトルはサポートしていない)
- タイトル: 考察日時から自動生成(例: 【秋葉示唆考察】2025年12月6日、手動設定不可)
- アイキャッチ画像: 固定画像を自動設定(手動設定不可)
- 本文欄: サポートしていない(ブロックエディタ+post_meta で管理)
- パーマリンク:
/daily-article/Y-n-j/(例:/daily-article/2025-12-6/)- 考察日時(
kousatsu_date)から自動生成(format_date_permalink()メソッドでY-n-j形式に変換) - 考察日時が存在しない場合は、デフォルトのパーマリンク(投稿スラッグ等)を使用
- 考察日時(
ホール別イベント(daily_article_events)
- メタキー:
daily_article_events(JSON) - 形式:
{ "espasu": [{"id": 1, "name": "〇〇の日"}], "island": [], "bigapple": [...] }ホールキー(espasu / island / bigapple)をキーとし、各ホールにイベントマスタの id と name の配列を格納する。 - 保存: 管理画面の基本情報メタボックス内「各ホールのイベント」で、ホールごとにイベントを複数選択または新規登録し、投稿を保存すると post meta に保存される。
- 公開時の同期: 日別記事を公開すると、
DatabaseSyncHooksがdaily_article_eventsをホールキーごとのイベント名配列に変換してdb_Link_day.eventへ同期する(該当する日付の行を UPSERT)。post_meta の{ id, name }形式は、同期時には name のみが使われる。 - db_Link_day の管理: 日別リンク(wp_db_Link_day)の一覧・検索・編集は管理画面「設定 → 日別リンク」で行える。追加・削除は日別記事登録時の処理に委ねる(
core_src/Admin/link_day/LinkDayAdminPage.php)。 - API: イベント一覧は
GET /wp-json/event-master/v1/list?hall=xxx、新規登録はPOST /wp-json/event-master/v1/register(PR994 で実装済み)を利用。
関連ファイル
カスタム投稿タイプ登録
core_src/PostType/DailyArticlePostType.php- カスタム投稿タイプの登録、パーマリンク設定、リライトルール等
管理画面・メタ登録
core_src/PostType/DailyArticle/Admin/DailyArticlePostTypeAdmin.php- 本文欄非表示、テンプレートメタデータ管理、公開ボタン修正等core_src/PostType/DailyArticle/Hooks/RestMetaRegistration.php-register_post_metaによる kousatsu_date / daily_article_events / halls の定義(show_in_rest 無効のため管理画面保存で post_meta へ保存)core_src/Admin/link_day/LinkDayAdminPage.php- 日別リンク(wp_db_Link_day)の一覧・検索・編集(設定 → 日別リンク)- 管理画面UI改善機能 - 必須フィールドの常時表示とScreen Options制御
参考資料
- DailyArticleTemplate README - テンプレート機能の詳細
- 日別記事テンプレート「絵文字」機能 設計書 - post_meta と専用テーブル連携の設計
- 子テーマ全体を親 repo + slot-kouryaku submodule で持つ案(将来検討): Issue #1542
最終更新
- 更新日: 2026-03-29
- バージョン: 1.6
- 変更内容: ラッパー配置を
myCustom/myTemplate/single-daily-article-template.phpに統一。_wp_page_templateの既存投稿の扱いを追記。将来の親 repo / submodule 案は Issue #1542 を参照