テンプレートとテンプレートパートのフロー

この文書では、フロントエンドでテンプレートとテンプレートパートがどのようにレンダリングされ、バックエンドで編集されるかの内部構造を説明します。

ストレージ

通常のテンプレートと同様に、ブロックテンプレートは最初はテーマフォルダー内のファイルとして存在しますが、主な違いは、ユーザーがサイトエディターのUIでこれらのテンプレートを編集できることです。

ユーザーがテンプレート(またはテンプレートパート)を編集すると、初期のテーマテンプレートファイルはそのまま保持されますが、テンプレートのフォーク版がwp_templateカスタム投稿タイプ(またはテンプレートパート用のwp_template_part)に保存されます。

これらの機能により、いつでもテーマからのテンプレートファイルとCPTテンプレート(編集されたテンプレート)の混合が使用されて、サイトのフロントエンドがレンダリングされます。

同期

異なる2つの場所からテンプレートを編集およびレンダリングするために使用されるアルゴリズムを簡素化するために、「テンプレート同期」と呼ばれる操作を実行しました。

同期は、wp_template(およびwp_template_part)カスタムテンプレート内のテーマテンプレートをauto-draftステータスで複製することから成ります。ユーザーがこれらのテンプレートを編集すると、ステータスはpublishに更新されます。

これは次のことを意味します:

  • テンプレートのレンダリング/取得は、カスタム投稿タイプテンプレートのみを考慮すればよいです。テーマフォルダーからテンプレートファイルを直接取得する必要はありません。同期により、これらはCPTに複製されることが保証されます。
  • 触れられていないテーマテンプレートはauto-draftステータスを持ちます。
  • 編集されたテーマテンプレートはpublishステータスを持ちます。

同期は2つの異なるフローにとって重要です:

  • テンプレートとテンプレートパートを編集する際、サイトエディターフロントエンドはREST APIを通じて編集された利用可能なテンプレートを取得します。これは、GET APIリクエストがwp-templatesおよびwp-template-partsエンドポイントに対して実行される場合、同期が必要であることを意味します。
  • テンプレートをレンダリングする際(時には「テンプレートを解決する」と呼ばれる):これは、WordPressがテンプレート階層を横断し、現在読み込まれているページに対してレンダリングする適切なテンプレートを見つけるために従うアルゴリズムです。
  • ブロックテーマをエクスポートする際、すべてのテンプレートをファイルとしてエクスポートする必要があります。操作を簡素化し、CPTテンプレートのみをエクスポートするために同期が必要です。

テーマの切り替え

ブロックテーマは互いに参照できるテンプレートを使用し、カスタム投稿タイプに保存できるため、異なるテーマからテンプレートとテンプレートパートを混合することが可能になります。例えば:

  • ユーザーはテーマAの「ヘッダー」テンプレートパートが気に入っており、テーマBで使用したいと考えています。
  • ユーザーはテーマAの「コンタクト」テンプレートが気に入っており、テーマBで使用したいと考えています。

これらのフローを有効にするには、よく考えられたUIと体験が必要です。現在のフルサイト編集のフェーズでは、これらの可能性を禁止し、テンプレートとテンプレートパートをテーマ固有にすることから始めています。

とはいえ、テンプレートとテンプレートパートが最初にどこから来たのかを追跡することは依然として重要です。どのテーマに基づいているのかを把握するために、各テンプレートとテンプレートパートCPTエントリに対してテーマ識別子を含むtheme投稿メタを保存します。

将来的には、ユーザーが異なるtheme投稿メタ値を持つテンプレートとテンプレートパートを混合できるようにすることを検討するかもしれません。