Nextora 子テーマ
Nextora の子テーマを作成および監査します。ブートストラップ、アセットパイプライン、子ブロックレジストラを含みます。親レベルの規約は親テーマ自体にあります。ブロック内部は ../nextora-gutenberg-blocks/SKILL.md に、パレット、フォント、ビジタースイッチャーに関する内容は ../nextora-design-system/SKILL.md に属します。
読み込むべき参照資料
ファイルを書き始める前に、相対パスでこれらを読んでください:
references/child-contract.md— スラッグ/プレフィックス置換表、正確なディレクトリレシピ、ヘッダー、ブートストラップとエンキューコード、レジストラ、PHP 規約、サンプルの観察された欠陥、および下流の WordPress 受け入れレシピ。ステップ3でロードし、読む前にコードを書かないでください。source-map.md— すべてのルールの出典、証明タグ、およびよく誤解される事実。quality-gates.md— 完成した子テーマが測定されるゲート。完了を宣言する前にロードしてください。
ローカルソースを読むことは、これらのファイルを読むよりも優先されます。スキルや参照で引用されている値はすべてアンカーであり、現在の事実ではありません。
順序付けられたワークフロー
1. ルートを特定し、仮定しない
ライブインストールでは、親がテンプレートディレクトリ、子がスタイルシートディレクトリです:
get_template_directory(); // 親ルート
get_stylesheet_directory(); // アクティブなテーマルート(子がアクティブな場合は子ルート)
インストール外では、Theme Name: Nextora を含む style.css を親として見つけ、Template: nextora を含むものを子として見つけます。親ソースが本当に存在しない場合は、その旨を伝えて Nextora 互換性の主張を停止し、親に依存しない作業のみを完了します。アンカーを捏造したり、別のテーマを黙って代用したりしないでください。
2. 提案する前に証拠を読む
ターゲットの子テーマから — または、ポート元のサンプルがある場合はサンプルの子テーマから:
style.css— 実際のヘッダー:Template、Version、Requires at least、Requires PHP、Tested up to、Text Domain、License。functions.php— ロード順序と、ファイルスコープでテーマが必要とするもの。theme.json—version、パレット/フォントスラッグ、customTemplates、templateParts。package.jsonと.nvmrc— どのビルドスクリプトが存在し、どの Node で動作するか。inc/、blocks/、resources/、assets/— 既に存在するもの。
親から: style.css、functions.php、inc/assets/assets.php、blocks/blocks.php。これらは子が依存するものなので、そのハンドル名とレジストラの動作が契約であり、ドキュメントではありません。
3. ファイルを書き込む前に命名表を修正する
references/child-contract.md をロードし、要求されたスラッグの置換表を埋めてください。生成されるすべての識別子 — PHP 関数、定数、テキストドメイン、ブロック名、CSS クラス、カスタムプロパティ、パターンスラッグ、ハンドル、ファイルベース名 — は、その1つのスラッグから派生します。親が所有する名前 (nextora_*、NEXTORA_*、nextora/*、global-styles、nextora-app、nextora-main、親のパレットとフォントスラッグ、--nextora-font-* ロール) は決して名前変更されません。
4. 子テーマが必要とするディレクトリのみをレイアウトする
レシピは references/child-contract.md にあります。必須: ルートの style.css、theme.json、functions.php。必要に応じて inc/、resources/、assets/、templates/、parts/、patterns/ を追加し、blocks/<block-slug>/ は子テーマが実際にカスタムブロックを出荷する場合のみ、フォントとライセンスファイルはフォントが出荷される場合のみ追加します。空の機能のスキャフォールディングを作成したり、テーマツリー全体をクローンしたりしないでください。
5. ヘッダー、バージョン定数、ブートストラップの順に書く
順序が重要です: inc/bootstrap/version.php は単一の <CHILD_PREFIX>_VERSION 定数を定義し、style.css ヘッダーの Version: はそれと等しくなければならず、アセットパイプラインはそれにフォールバックするため、パイプラインを必要とするものより先に定数が存在する必要があります。ヘッダーでは、実際の最小値のみを宣言し、他のテーマの Tested up to 値をコピーしないでください。
6. 子テーマが親より先にロードされることを考慮して functions.php を書く
WordPress は子テーマの functions.php を親テーマの 前にロードするため、ファイルスコープで親関数を呼び出したり、NEXTORA_* 定数を読み取ったりしてはいけません。子自身の _DIR/_URI をスタイルシートディレクトリから定義し、Composer オートローダーは読み取り可能な場合のみ require し、子自身のファイルを require します。親に依存するすべての操作はフック内に属し、親ハンドルを名前で参照し、それらが登録されていることを確認してから行います。
7. アセットパイプラインを配線する
子スタイルシートは wp_enqueue_scripts の優先度25で、親の global-styles と nextora-app が登録されている場合にそれらに依存します。子スクリプトは優先度30で、nextora-main が登録されている場合に依存します。エディターキャンバススタイルは after_setup_theme の優先度20で add_editor_style() を通じて追加します。各エンキューを読み取り可能ファイルチェックでガードし、競合しない出力ベース名を使用します — 子の assets/css/app.css や assets/js/main.js が親のアセットをシャドウする可能性があります。完全なコードとフックテーブルは references/child-contract.md にあります。
8. 子テーマがブロックを出荷する場合のみブロックレジストラを追加する
WordPress はテーマの blocks/ フォルダをスキャンしません。読み取り可能な block.json を含む各ディレクトリを init で get_stylesheet_directory() から登録し、子インサーターカテゴリを追加し、クライアント側でカテゴリ強制をミラーリングします。ブロックメタデータ、エディターUI、レンダラーは ../nextora-gutenberg-blocks/SKILL.md にあります。blocks/ ディレクトリがない場合は、レジストラは不要です。
9. 外観をデザインシステムに任せる
子テーマがプリセットまたはビジターのカラー/フォント切り替えに従う必要がある場合は、同じセッションで ../nextora-design-system/SKILL.md をロードし、ロールバインディング、theme.json のフォントファミリー、およびプリセットファイルを決定させます。子テーマの body、見出し、ボタンは Nextora のロール変数を介して解決されます。これらは単一のサンプルデザインのフォントに直接固定されることはありません。
10. 実行中のサイトに対して検証する
ターゲット子テーマ自身の package.json が宣言するビルドコマンドのみを実行し、フロントエンドページとエディターキャンバスをロードして、アセットが実際にエンキューされていること、およびガードが欠落したビルドを隠していないことを確認します。references/child-contract.md の受け入れレシピはブラウザレベルの証明です。実行しなかったものは未検証としてマークしてください。
完了チェック
- 親と子が独自の
style.cssから特定され、仮定やハードコードされていない。 Template: nextoraが存在し、ヘッダーのVersionが<CHILD_PREFIX>_VERSIONと等しい。Text Domain:が子スラッグと等しく、子の PHP/JS 内のすべての翻訳可能な文字列がそのドメインを使用している。- 子ファイルスコープで親関数の呼び出しや
NEXTORA_*の読み取りがない。 - すべてのエンキュー/エディタースタイル登録は、親ハンドルを追加する前に読み取り可能ファイルチェックと
wp_style_is()/wp_script_is()チェックでガードされている。 - 子アセットのベース名が親の
app.css/main.jsと衝突していない。 - ブロックレジストラは
blocks/が存在する場合のみ存在し、スタイルシートディレクトリを使用し、読み取り不可能なblock.jsonをスキップし、子カテゴリを登録している。 references/child-contract.mdに従った構造であり、quality-gates.mdが適用されている。- フロントエンドとエディターキャンバスが実際に子アセットをロードしている。
境界
このスキルは Markdown の指示です。ジェネレーター、スターターテーマツリー、パッケージマネージャー、インストーラーは含まず、親テーマやサンプル子テーマを編集することはありません。親の npm run gen スキャフォールドは親専用です。子テーマは、ここで説明されているファイルを記述することで作成されます。