ステージ3: ビルド
目標: サイトがローカルで動作する。実際のアイテムがコア機能を通じてレンダリングされる。問い合わせが保存、転送、そしてパージされる。構造テストが全てパスする。
最初に読むもの: プロジェクトの AGENTS.md、次に references/architecture.md。
手順
- ローカルサイト。 プロジェクトの
README.md、「初回起動」セクションに従う。その後確認:ddev wp eval 'echo wp_get_environment_type();'がlocalと出力される必要がある。 出力されない場合はreferences/local-env.mdを参照。localと出力されるまで、サイトは本番環境と認識されるため、インデックスされたり実際の顧客にメールを送信したりする可能性がある。 - サンプルコンテンツタイプのリネーム。 コンテンツが存在する前に行う。
<prefix>_offerをビジネス用語(ツアー、サービス、コース)に変更する:modules/content.php内の投稿タイプ、リライトスラッグ、ラベル、さらに関数名(_get_offers、_render_offer_card)、parts/offer-card.phpファイル、テスト。投稿タイプ名は20文字制限がある。 - コンテンツのモデリング。 概要に必要なすべてのフィールドを見つける。各フィールドをサニタイズコールバックと認証コールバック付きの投稿メタとして登録する。価格はメタ内の数値。0は「要問い合わせ」を意味し、「無料」ではない。編集者がよりリッチなフィールド画面を必要とする場合は、その上にACF(無料版)を追加するが、値はコア機能を通じてのみ読み取る。
- データファイル → ジェネレーター(所有者が多数のアイテムを提供する場合):
docs/data/<type>/にアイテムごとに1つのMarkdownまたはJSONファイルを保持する。- それらのファイルから投稿を作成または更新する冪等なWP-CLIスクリプトを作成する。
--dry-runオプションを付ける。ddev wp eval-file - < scripts/<name>.phpで実行する。 ファイルがレビュー可能な真実であり、DBはそのコピーである。
- テンプレートはセクションごとに1つのコア関数を呼び出す。
- レイアウトはテーマに存在する: テンプレート、
parts/、スキンオーバーライド。 - データ、クエリ、価格、ポリシー文、フォームはコアから取得する。
- 各呼び出しを
function_exists()でガードし、プラグインがない場合にテンプレートが致命的エラーを起こさないようにする。
- レイアウトはテーマに存在する: テンプレート、
- 問い合わせ。 パイプラインを
modules/enquiry.phpに保持する(references/forms-and-leads.md)。- フィールドを3か所で同時に追加する: フォーム、ハンドラー、詳細ボックス。
- 受信ボックスと送信者を
wp-config.phpの定数に設定し、コード内には決して記述しない。
- ポリシーテキスト(利用規約、デポジット、キャンセル): コアに1つの関数として配置する(例:
<prefix>_policy( 'cancellation' ))。テンプレートはその関数を出力し、テンプレートがポリシー文をハードコードするとテストが失敗する。 - 新しいモジュール?
modules/に1ファイル、ブートストラップに1行のrequire_onceを追加し、同じコミットでtests/structure/core.spec.tsを更新する。 - チェックとコミット。
npm run test:structureとnpm run lint:php(エラー0)を実行する。- wp-rules-reviewer エージェントに差分をレビューしてもらう。
- コミットする(Conventional Commits)。
ゲート(SITE_STATUS.md でチェック)
-
wp_get_environment_type()= local - コアプラグインと子テーマが有効、スキンが読み込まれている
- 実際のアイテムがコア機能を通じてレンダリングされている、カード、価格、スラッグがハードコードされていない
- 問い合わせ: 保存 → メール送信 → 再試行 → パージ、Mailpitでエンドツーエンドテスト済み
- 構造テストがパス、PHPCSエラー0
禁止事項
- ビジネスロジック、
WP_Query、価格、pll_*呼び出し、ポリシーテキストをテーマに記述すること。 wp_unslash+ サニタイズ関数なしで生の$_POSTや$_GETを使用すること、esc_*なしで出力すること。- サードパーティのAPIキーやエンドポイントをHTMLやJSに記述すること。サーバーから転送すること。
- 生の
wp option updateでプラグインモジュールを切り替えること。プラグイン独自のUIまたはCLIを使用し、影響を受けるすべてのページを再確認すること。 - プリフィックスなしの関数、オプション、フック、メタキー、nonce。