Skip to content

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 を読み込んでいること(本プロジェクト全体の前提)

テンプレートの登録(必須)

日別記事の単体表示では、TemplateHookssingle_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 で指定されたテンプレート本体を requireget_footer() で閉じるラッパー
  • 参照: DailyArticleTemplate READMEcore_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_PATHmyCustom/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は ConstantsServiceProviderDAILY_ARTICLE_DEFAULT_THUMBNAIL_ID(既定値 453)として定義。環境でメディアIDが異なる場合は、connector.php 読み込み前にこの定数を定義して上書き可能

投稿について

1. 投稿データの管理方式(post_meta)

日別記事の入力・保存は WordPress 標準の post_meta で行います。

  • 基本情報メタRestMetaRegistration.phpregister_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_urlsHallEnum の英語 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管理画面で以下の手順を実行してください:

  1. 「設定」→「パーマリンク設定」を開く
  2. 何も変更せずに「変更を保存」をクリック
  3. これにより、パーマリンクのリライトルールが更新されます

カスタム投稿タイプの特徴

  • 投稿タイプ名: 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 に保存される。
  • 公開時の同期: 日別記事を公開すると、DatabaseSyncHooksdaily_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制御

参考資料

最終更新

  • 更新日: 2026-03-29
  • バージョン: 1.6
  • 変更内容: ラッパー配置を myCustom/myTemplate/single-daily-article-template.php に統一。_wp_page_template の既存投稿の扱いを追記。将来の親 repo / submodule 案は Issue #1542 を参照