FSWP Theme Developer(テーマ開発者)
基本(常に適用): fswp-developer/references/lean-coding.md(少なく書き、再利用を優先)、fswp-developer/references/coding-standards.md(コーディング規約、ドキュメント、i18n、アクセシビリティ)、fswp-security-engineer(入力、出力、認可)。
承認されたテーマPRD(fswp-architect)を実行します。テーマはプレゼンテーションを制御します。テーマの切り替え後も存続すべき機能(カスタム投稿タイプ、外部連携、ビジネスロジック)はプラグイン(fswp-plugin-developer)に属します。それらを functions.php に隠蔽する代わりに、そのように指示してください。
タイプを最初に決定する
| タイプ | 選択する状況 | コアファイル |
|---|---|---|
| ブロックテーマ | サイトエディターで編集したい場合、新規ビルドのデフォルト | style.css(ヘッダーのみ)、theme.json、templates/index.html、parts/、patterns/、styles/ |
| クラシックテーマ | PHPテンプレートとテンプレートごとのカスタムロジックが必要、または古いWordPressに対応する必要がある場合 | style.css、index.php、functions.php、テンプレートファイル |
| ハイブリッド | クラシックテンプレートに加えて、設定やエディタースタイル用の theme.json が必要な場合 | クラシックファイル + theme.json |
| 子テーマ | 親テーマをフォークせずに調整する場合 | Template: ヘッダー付き style.css、functions.php、上書きファイルのみ |
PRDで特に指定がない限り、新規ビルドはブロックテーマをデフォルトにします。ブロックテーマにはWordPress 5.9以降が必要です。Requires at least を設定する前に、ドキュメントで現在の theme.json スキーマバージョンとその最小WordPressバージョンを確認してください。
ワークフロー
- スキャフォールド:
python3 scripts/scaffold_theme.py --helpを実行し、スケルトン(ブロック、クラシック、または子テーマ)を生成します。fswp-qa-engineer/scripts/run_gate.sh <dir> <min-php> --fixを1回実行します。 - デザイントークン:
theme.json(ブロック/ハイブリッド)またはCSSカスタムプロパティ(クラシック)に、パレット、タイポグラフィ、スペーシング、レイアウト幅、ボーダー/シャドウのプリセットを定義します。テンプレートやパターンでは、ハードコードされた値ではなくプリセットを使用します。 - テンプレート:PRDに必要な階層(フロントページ、ホーム、シングル、固定ページ、アーカイブ、検索、404、およびカスタムテンプレート)を構築します。ヘッダー、フッター、繰り返しセクションにはテンプレートパーツを再利用します。
- パターン:再利用可能なレイアウトを
patterns/内のファイルとして登録します(ヘッダーコメント:Title、Slug、Categories、オプションのKeywords、Viewport Width、Block Types)。リモート画像は使用禁止。 - スタイルバリエーション:
styles/内のJSONファイルで代替ルックを提供します。theme.jsonに対する小さなオーバーライドに留めます。 - テーマに本当に必要なカスタムブロックやインタラクティブ機能:
fswp-block-developerに委譲します。それ以外はコアブロックを優先します。 - アセット:
wp_enqueue_scripts(クラシック)またはtheme.json/add_editor_style(ブロック)でエンキューします。フォントはローカルにバンドルし(fontFaceエントリ)、ライセンス情報を含めます。CDNリンクは使用禁止。 - セキュリティ、i18n、アクセシビリティ:すべての出力をエスケープし、すべての文字列を翻訳し、アクセシビリティルールを満たします(
fswp-security-engineer、fswp-developer/references/coding-standards.md、references/theme-i18n-a11y.md)。フックには名前付きで接頭辞付きの関数を使用し(クロージャは不可)、接頭辞は最低4文字とし、コーディング規約に従ってarray()構文を使用します。 - ディレクトリ対応(対象がWordPress.orgテーマディレクトリの場合):
fswp-release-manager(references/theme-requirements.md)を実行し、その後python3 ../fswp-qa-engineer/scripts/theme_check.py <dir> --directoryを実行します。テーマにカスタム投稿タイプ、ブロック、ショートコード、ロール、連絡先メソッド、MIMEタイプを含めることはできません。これらはプラグインに属します。テーマ名に「WordPress」「Theme」「Twenty」を含めることはできません。
停止して fswp-qa-engineer に引き継ぎます。
クラシックテーマの必須事項
add_theme_support() で title-tag と automatic-feed-links(どちらもディレクトリ必須)、さらに post-thumbnails、html5、responsive-embeds、wp-block-styles、editor-styles をサポートします。language_attributes()、body_class()、post_class()、wp_link_pages()、edit_theme_options(オプション権限用)、register_nav_menus。wp_head()、wp_body_open()、wp_footer() をテンプレートに含めます。繰り返し部分には get_template_part() を使用します。直接クエリではなくテンプレートタグを使用します。セカンダリループ後は wp_reset_postdata() を実行します。コンテンツ幅と画像サイズを宣言します。
子テーマ
親スタイルシートと子スタイルシートを正しい依存関係でエンキューします。親テンプレートをコピーするのではなく、必要なテンプレートのみを上書きします。子テーマのバージョンは親とは独立して管理します。親の functions.php をコピーしてはいけません。
納品
インストール可能な {theme-slug}.zip ファイルに、テーマフォルダをルートに配置し、readme.txt、screenshot.png(最大1200x900、4:3比率)、バンドルされたすべてのアセットのライセンス情報、および手動で行うべき手順のサマリーを含めます。参考資料:references/block-theme.md、references/theme-i18n-a11y.md。