Skip to content

DailyArticleTemplate - 使用手順書

概要

DailyArticleTemplateは、日別記事の定型ショートコードを自動生成するテンプレート機能です。日付とホール(複数選択可能)を入力値として受け取り、既存のショートコードを動的に生成します。

この機能により、複雑なHTML/ショートコードのコピペ作業を廃止し、投稿作業をカスタムフィールドへのデータ入力のみに簡略化できます。

目的

  • 複雑なHTML/ショートコードのコピペ作業を廃止
  • 投稿作業をカスタムフィールドへのデータ入力のみに簡略化
  • 日付とホールを指定するだけで、定型のショートコードを自動生成

前提条件

必要な環境

  • WordPress環境
  • カスタム投稿タイプ「日別記事」(daily_article)が設定されていること(詳細は DailyArticlePostType README を参照)

メタキー(post_meta)について

日別記事では以下のメタキーをブロックエディタのメタボックスで入力します:

  1. 日付フィールド(例: kousatsu_date

    • フィールドタイプ: 日付ピッカー
    • 必須: はい
    • 日付形式: YYYY-MM-DD
  2. ホール選択フィールド(例: halls

    • フィールドタイプ: チェックボックス
    • 必須: はい
    • 選択肢: アイランド秋葉原、エスパス秋葉原、ビッグアップル秋葉原、秋葉原uno
    • または、カンマ区切り文字列として入力可能
  3. 手動入力フィールド(例: manual_content

    • フィールドタイプ: WYSIWYGエディタ または テキストエリア
    • 必須: いいえ
    • HTML、WordPressブロック形式、ショートコードを含むコンテンツを入力可能
  4. 機種名フィールド(例: kishu

    • フィールドタイプ: テキスト
    • 必須: いいえ
    • kishudataショートコード用の機種名

使用方法

1. 投稿テンプレートの作成

カスタム投稿タイプ(例: kousatsu)に対応する投稿テンプレートファイル(例: single-kousatsu.php)を子テーマ内に作成します。

2. テンプレートファイルでの呼び出し

投稿テンプレートファイル内で、以下のように関数を呼び出します:

php
<?php
$post_id = get_the_ID();
// post_meta から値を取得
$date = get_post_meta($post_id, 'kousatsu_date', true);
$halls = get_post_meta($post_id, 'halls', true); // カンマ区切り文字列
$manual_content = get_post_meta($post_id, 'manual_content', true);
$kishu = get_post_meta($post_id, 'kishu', true);

// テンプレート関数を呼び出してショートコードを生成
echo generate_daily_article_template($date, $halls, $manual_content, $kishu);
?>

3. パラメータの説明

パラメータ必須説明
$datestring|DateTime|null必須対象日付(YYYY-MM-DD形式、YYYYMMDD形式、またはDateTimeオブジェクト)
$hallsstring|array|null必須ホール名(カンマ区切り文字列、配列、またはnull)。配列の場合は自動的に文字列へ変換されます
$manual_contentstring|null任意手動入力部分のコンテンツ(HTML、WordPressブロック形式、ショートコードを含む)
$kishustring|null任意機種名(kishudataショートコード用)

4. 生成されるショートコードの順序

以下の順序でショートコードが生成されます:

  1. 1回だけ生成(順序はテンプレートで変更可能):

    • [MonthlyLinkByYear year={year}]
    • [BirthDayMachinePickUp year={year} month={month} day={day} halls="{英字スラッグCSV}"]halls は投稿で選択したホールに同期)
  2. 各ホールに対してループ生成(以下の順序で各ホールごとに繰り返し):

    • [MailImage hall="{hall}" date="{YYYYMMDD}"]
    • [MoveDayHall preday="{前日YYYYMMDD}" nextday="{翌日YYYYMMDD}" name="{hall}"]
    • 手動入力部分(manual_content、指定されている場合)
    • [CustomCode_CreateDailyArticleRelationalDay date="{YYYY-MM-DD}" hall="{hall}"]
    • [CustomCode_CreateDailyArticleResult hall="{hall}" date="{YYYY-MM-DD}"]
    • [kishudata day="{YYYY/M/D}" hall="{hall}" kishu="{kishu}"](kishuが指定されている場合)

注意: 手動入力部分(manual_content)は各ホールごとに出力されます。

使用例

基本的な使用例

php
<?php
$post_id = get_the_ID();
$date = get_post_meta($post_id, 'kousatsu_date', true); // 例: "2024-11-01"
$halls = get_post_meta($post_id, 'halls', true); // 例: "アイランド秋葉原,エスパス秋葉原"
$manual_content = get_post_meta($post_id, 'manual_content', true); // 例: "<p>手動入力部分</p>"
$kishu = get_post_meta($post_id, 'kishu', true); // 例: "犬夜叉"

echo generate_daily_article_template($date, $halls, $manual_content, $kishu);
?>

配列形式のホール指定

php
<?php
$post_id = get_the_ID();
$date = get_post_meta($post_id, 'kousatsu_date', true);
$halls = get_post_meta($post_id, 'halls', true); // カンマ区切り文字列または配列
// 配列の場合は自動的にカンマ区切り文字列に変換されます

echo generate_daily_article_template($date, $halls);
?>

手動入力部分を含む使用例

php
<?php
$post_id = get_the_ID();
$date = get_post_meta($post_id, 'kousatsu_date', true);
$halls = get_post_meta($post_id, 'halls', true);
$manual_content = get_post_meta($post_id, 'manual_content', true);
// 例: "<p>手動入力部分</p><!-- wp:shortcode -->[SomeOtherShortcode param=\"value\"]<!-- /wp:shortcode -->"

echo generate_daily_article_template($date, $halls, $manual_content);
?>

最小限の使用例(必須パラメータのみ)

php
<?php
$post_id = get_the_ID();
$date = get_post_meta($post_id, 'kousatsu_date', true);
$halls = get_post_meta($post_id, 'halls', true);

echo generate_daily_article_template($date, $halls);
?>

生成例

単一ホールの場合

$date = "2024-11-01", $halls = "アイランド秋葉原" が指定された場合:

<!-- wp:shortcode -->
[MonthlyLinkByYear year=2024]
<!-- /wp:shortcode -->
<!-- wp:shortcode -->
[BirthDayMachinePickUp year=2024 month=11 day=1 halls="island"]
<!-- /wp:shortcode -->

<!-- wp:shortcode -->
[MailImage hall="アイランド秋葉原" date="20241101"]
<!-- /wp:shortcode -->

<!-- wp:shortcode -->
[MoveDayHall preday="20241031" nextday="20241102" name="アイランド秋葉原"]
<!-- /wp:shortcode -->

<!-- wp:shortcode -->
[CustomCode_CreateDailyArticleRelationalDay date="2024-11-01" hall="アイランド秋葉原"]
<!-- /wp:shortcode -->

<!-- wp:shortcode -->
[CustomCode_CreateDailyArticleResult hall="アイランド秋葉原" date="2024-11-01"]
<!-- /wp:shortcode -->

複数ホールの場合

$date = "2024-11-01", $halls = "アイランド秋葉原,エスパス秋葉原", $manual_content = "<p>手動入力部分</p>" が指定された場合:

<!-- wp:shortcode -->
[MonthlyLinkByYear year=2024]
<!-- /wp:shortcode -->
<!-- wp:shortcode -->
[BirthDayMachinePickUp year=2024 month=11 day=1 halls="island,espasu"]
<!-- /wp:shortcode -->

<!-- wp:shortcode -->
[MailImage hall="アイランド秋葉原" date="20241101"]
<!-- /wp:shortcode -->

<!-- wp:shortcode -->
[MoveDayHall preday="20241031" nextday="20241102" name="アイランド秋葉原"]
<!-- /wp:shortcode -->

<p>手動入力部分</p>

<!-- wp:shortcode -->
[CustomCode_CreateDailyArticleRelationalDay date="2024-11-01" hall="アイランド秋葉原"]
<!-- /wp:shortcode -->

<!-- wp:shortcode -->
[CustomCode_CreateDailyArticleResult hall="アイランド秋葉原" date="2024-11-01"]
<!-- /wp:shortcode -->

<!-- wp:shortcode -->
[MailImage hall="エスパス秋葉原" date="20241101"]
<!-- /wp:shortcode -->

<!-- wp:shortcode -->
[MoveDayHall preday="20241031" nextday="20241102" name="エスパス秋葉原"]
<!-- /wp:shortcode -->

<p>手動入力部分</p>

<!-- wp:shortcode -->
[CustomCode_CreateDailyArticleRelationalDay date="2024-11-01" hall="エスパス秋葉原"]
<!-- /wp:shortcode -->

<!-- wp:shortcode -->
[CustomCode_CreateDailyArticleResult hall="エスパス秋葉原" date="2024-11-01"]
<!-- /wp:shortcode -->

注意事項

日付形式

  • 日付は YYYY-MM-DD 形式(例: 2024-11-01)または YYYYMMDD 形式(例: 20241101)で指定できます
  • DateTimeオブジェクトも受け付けます
  • 前日・翌日は自動的に計算されます

ホール名

  • 対応ホール: アイランド秋葉原、エスパス秋葉原、ビッグアップル秋葉原、秋葉原uno
  • 複数ホールを指定する場合は、カンマ区切り文字列(例: "アイランド秋葉原,エスパス秋葉原")または配列で指定できます
  • カンマが連続している場合(例: "island,,espasu")や、末尾にカンマがある場合(例: "island,espasu,")は、空の要素が自動的に除去されます

手動入力部分

  • 手動入力部分(manual_content)は各ホールごとに出力されます
  • HTML、WordPressブロック形式、ショートコードを含むコンテンツを入力可能です
  • ショートコードが含まれている場合は、do_shortcode()で実行されます
  • XSS対策として、wp_kses_post()でサニタイゼーション処理が行われます

エラーハンドリング

  • バリデーションエラーが発生した場合、WP_DEBUGが有効な場合のみエラーメッセージが表示されます
  • 予期しないエラーはerror_log()でログに記録されます
  • エラー時は空文字が返されます(デバッグモードでない場合)

トラブルシューティング

何も表示されない

  1. WP_DEBUGを有効にして、エラーメッセージを確認してください
  2. メタキー(post_meta)名が正しいか確認してください
  3. 日付とホールが正しく設定されているか確認してください

エラーメッセージが表示される

  • 日付形式が正しいか確認してください(YYYY-MM-DD または YYYYMMDD
  • ホール名が正しいか確認してください(対応ホール: アイランド秋葉原、エスパス秋葉原、ビッグアップル秋葉原、秋葉原uno)

手動入力部分が表示されない

  • manual_contentフィールドが空でないか確認してください
  • HTMLが正しくエスケープされていないか確認してください(wp_kses_post()でサニタイゼーションされます)

関連ファイル

テンプレート関数

  • core_src/Template/DailyArticleTemplate/DailyArticleTemplate.php

コントローラー

  • core_src/Controller/DailyArticleTemplateController/DailyArticleTemplateController.php

コンバーター

  • core_src/Template/DailyArticleTemplate/converter/DailyArticleTemplateConverter.php

DTO

  • core_src/Template/DailyArticleTemplate/dto/DailyArticleTemplateRequestDto.php

ビュー

  • core_src/View/templates/DailyArticleTemplate/DailyArticleTemplateView.php
  • core_src/View/templates/daily_article_template/daily_article_template.twig

関連する既存ショートコード

  • MonthlyLinkByYear - 月別リンクカレンダー(日別テンプレ上部)
  • BirthDayMachinePickUp - 誕生日ピックアップ+関連機種(日別テンプレ上部・halls 指定)
  • MakeArtist20230318 - 上記2つを連結したレガシー統合タグ(通常投稿本文の過去記事)
  • MailImage - メール画像表示
  • MoveDayHall - 前日・翌日記事へのリンク
  • CustomCode_CreateDailyArticleRelationalDay - 関連日、カレンダー部分
  • CustomCode_CreateDailyArticleResult - 日別記事の結果部分
  • kishudata - 機種データ出力

本番環境での設定手順

本番環境でDailyArticleTemplate機能を使用するには、以下の設定が必要です。

1. カスタム投稿タイプの設定

カスタム投稿タイプ「日別記事」(daily_article)の設定については、DailyArticlePostType READMEを参照してください。

2. テンプレートファイルの追加

カスタム投稿タイプ(daily_article)用のテンプレート階層は、WordPressの仕様により以下の両方が自動的に認識されます(WordPress 4.7以降):

  • single-daily_article.php(アンダースコア区切り、従来の標準)
  • single-daily-article.php(ハイフン区切り、4.7以降対応)

現在の実装では single_template フィルター(TemplateHooks::fix_template())が有効化されているため、テンプレートファイル「single-daily-article-template.php」が強制的に使用されます。これにより、上記のデフォルト階層は実質的にバイパスされます。このテンプレート強制の理由は、Git管理下のテンプレートを常に利用し、デザイン・機能の一貫性を保つためです。

管理画面で選択可能なテンプレート

子テーマルートからの相対パスで myCustom/myTemplate/ に以下のファイルを置きます(本リポジトリでは myTemplate/single-daily-article-template.php としてバージョン管理し、デプロイでリモートの myCustom/myTemplate/ に配置されます)。

ファイルパス: myCustom/myTemplate/single-daily-article-template.php(子テーマルート基準)

ファイル内容:

php
<?php
/*
Template Name: 日別記事テンプレート
Template Post Type: daily_article
*/

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

get_header();

// テンプレート本体は DAILY_ARTICLE_TEMPLATE_BODY_PATH で指定されたファイルを使用
if ( ! defined( 'DAILY_ARTICLE_TEMPLATE_BODY_PATH' ) ) {
	// セキュリティ上の理由から、詳細な情報は画面には表示せずログにのみ出力する
	error_log( // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log -- 運用時の調査用にサーバ側ログへのみ出力する意図的な使用
		'[ERROR] DailyArticleTemplate: DAILY_ARTICLE_TEMPLATE_BODY_PATH is not defined. Check that myCustom/connector.php is loaded correctly.'
	);
	wp_die(
		esc_html__( '日別記事テンプレートの設定に問題があります。サイト管理者にお問い合わせください。', 'cocoon-child-master' )
	);
}
if ( ! file_exists( DAILY_ARTICLE_TEMPLATE_BODY_PATH ) ) {
	// セキュリティ上の理由から、フルパスは画面には表示せずログにのみ出力する
	error_log( // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log -- 運用時の調査用にサーバ側ログへのみ出力する意図的な使用
		sprintf(
			'[ERROR] DailyArticleTemplate: Daily article template body not found: %s',
			DAILY_ARTICLE_TEMPLATE_BODY_PATH
		)
	);
	wp_die(
		esc_html__( '日別記事テンプレート: テンプレート本体が見つかりません。', 'cocoon-child-master' )
	);
}
require DAILY_ARTICLE_TEMPLATE_BODY_PATH;

get_footer();

注意:

  • single-daily-article-template.php は、カスタム投稿タイプ「日別記事」(daily_article)専用のテンプレートです。
  • single_templateフィルター(TemplateHooks::fix_template())により、すべてのdaily_article投稿に対して自動的に適用されます(テンプレート選択は不要)。
  • WordPressのデフォルトテンプレート階層(single-daily_article.phpsingle-daily-article.php)はバイパスされます。
  • テンプレート本体のパスは定数 DAILY_ARTICLE_TEMPLATE_BODY_PATH で管理されます。アプリ起動時(ConstantsServiceProvider)に ROOT(開発時は core_src、本番は _build/core_*)からの相対パスで定義されます。代用パスは廃止しており、未定義またはファイル不在の場合は wp_die で検知します。

3. 動作確認

  1. カスタム投稿タイプ「日別記事」で新規投稿を作成
  2. テンプレートが正しく適用されていることを確認
  3. フロントエンドで正しく表示されることを確認

参考資料

  • DailyArticlePostType README - カスタム投稿タイプの詳細
  • 関連する仕様・タスクは GitHub の Issue で管理しています

最終更新

  • 更新日: 2026-03-29
  • バージョン: 1.3
  • 変更内容: ラッパーの配置パスを myCustom/myTemplate/single-daily-article-template.php に統一(DAILY_ARTICLE_TEMPLATE_PATH とデプロイ先の整合)。_wp_page_template の既存値については DailyArticlePostType README を参照。