パターンの作成

カスタムパターンの作成に不慣れな場合は、パターンの紹介ガイドを一度読んで、プロセスを理解してください。

あなたのパターンは好きなもので構いませんが、この記事の目的のために、以下に共有するコードは、いくつかのブロックがネストされたコアのカバー ブロックの構造に従っています:

  • グループ
    • 見出し
    • 段落
    • ボタン
      • ボタン

エディターでこれを再現してみてください。特に、エディターの操作に慣れていない場合は、ぜひ試してみてください。以下はエディターからのパターンのスクリーンショットです:

黒い背景とコンテンツエリアに白いデモテキストが表示された基本的なカバーブロックを示すWordPressパターンエディター。

このパターンは自由にカスタマイズできますが、初めてパターンを作成する際は、比較的シンプルに保つことをお勧めします。

上記のパターンのブロックマークアップは次のようになります(パターンコードの取得に関する詳細はパターンの紹介記事を参照してください):

  1. <!-- wp:cover {"overlayColor":"contrast","align":"full"} -->
  2. <div class="wp-block-cover alignfull"><span aria-hidden="true" class="wp-block-cover__background has-contrast-background-color has-background-dim-100 has-background-dim"></span><div class="wp-block-cover__inner-container"><!-- wp:group {"style":{"spacing":{"blockGap":"2.5rem"}},"layout":{"type":"constrained","wideSize":"%","contentSize":"75%"}} -->
  3. <div class="wp-block-group"><!-- wp:heading {"textAlign":"center"} -->
  4. <h2 class="wp-block-heading has-text-align-center">Welcome to My Site</h2>
  5. <!-- /wp:heading -->
  6. <!-- wp:paragraph {"align":"center"} -->
  7. <p class="has-text-align-center">This is my little home away from home. Here, you will get to know me. I'll share my likes, hobbies, and more. Every now and then, I'll even have something interesting to say in a blog post.</p>
  8. <!-- /wp:paragraph -->
  9. <!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
  10. <div class="wp-block-buttons"><!-- wp:button {"className":"is-style-outline"} -->
  11. <div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button">See My Popular Posts →︎</a></div>
  12. <!-- /wp:button --></div>
  13. <!-- /wp:buttons --></div>
  14. <!-- /wp:group --></div></div>
  15. <!-- /wp:cover -->

この記事の残りの部分では、この同じパターンを使用し、それを登録、登録解除、さらにカスタマイズする方法を学びます。

ほとんどのパターンをグループ、カバー、または他のコンテナブロック(すなわち、ネストされたブロックを許可するブロック)でラップすることは良いプラクティスです。これにより、テーマユーザーがエディター内でパターン全体を移動しやすくなります。また、この外部ブロックにCSSクラスを追加して、パターン全体に適用されるカスタムスタイリングを行うこともできます。

パターンの登録

WordPressでブロックパターンを登録する方法は2つあります:

  • ブロックマークアップを含むファイルをテーマの/patternsフォルダーに配置すること。
  • register_block_pattern()関数を手動で呼び出すこと。

最も簡単な方法は最初の方法です。次のセクションで両方の方法を学びますが、このハンドブックでは、いくつかの例外を除いて/patternsフォルダーを使用することをお勧めします。

パターンを登録するための/patternsディレクトリの使用

WordPressは、テーマの/patternsフォルダーに配置された任意のパターンファイルを認識し、有効なパターンファイルヘッダーがある場合は自動的に登録します。

ファイルヘッダーは、ファイルの先頭にキーと値のペアのリストを含むPHPコメントコードです。WordPressはこの情報を解析してメタデータを収集します。この場合、メタデータはブロックパターンを登録するために使用されます。

パターンファイルヘッダーには、次のキーを設定できます:

  • Title: 翻訳可能な人間が読めるタイトル。
  • Slug: namespace/pattern-nameの形式で、パターンに固有の名前空間付きスラッグ。
  • Categories: パターンが属するカテゴリのカンマ区切りリスト。
  • Description: 登録されたパターンの長い説明。スクリーンリーダーにのみ表示されます。
  • Viewport Width: パターンをプレビューする際の<iframe>ビューポートの幅(ピクセル単位)。
  • Inserter: パターンをインサータに表示するかどうか。デフォルトはtrueです。
  • Keywords: パターンに関連するキーワードのカンマ区切りリスト。ユーザーがインサータで検索する際に使用されます。
  • Block Types: パターンに関連付けるブロックタイプのカンマ区切りリスト(例: core/cover, core/post-content)。
  • Post Types: パターンを制限する投稿タイプのカンマ区切りリスト(例: post, page)。デフォルトはすべての投稿タイプです。
  • Template Types: パターンが適合するテンプレートタイプのカンマ区切りリスト(例: home, single)。

ほとんどのパターンには、少なくともタイトル、スラッグ、カテゴリフィールドを追加する必要があります。パターンファイルは次のようになります:

  1. <?php
  2. /**
  3. * Title: Hero
  4. * Slug: themeslug/hero
  5. * Categories: featured
  6. */
  7. ?>
  8. <!-- Pattern code goes here. -->

次に、前のセクションからコピーしたコードをテーマの/patterns/hero.phpファイルに追加しましょう:

  1. <?php
  2. /**
  3. * Title: Hero
  4. * Slug: themeslug/hero
  5. * Categories: featured
  6. */
  7. ?>
  8. <!-- wp:cover {"overlayColor":"contrast","align":"full"} -->
  9. <div class="wp-block-cover alignfull"><span aria-hidden="true" class="wp-block-cover__background has-contrast-background-color has-background-dim-100 has-background-dim"></span><div class="wp-block-cover__inner-container"><!-- wp:group {"style":{"spacing":{"blockGap":"2.5rem"}},"layout":{"type":"constrained","wideSize":"%","contentSize":"75%"}} -->
  10. <div class="wp-block-group"><!-- wp:heading {"textAlign":"center"} -->
  11. <h2 class="wp-block-heading has-text-align-center">Welcome to My Site</h2>
  12. <!-- /wp:heading -->
  13. <!-- wp:paragraph {"align":"center"} -->
  14. <p class="has-text-align-center">This is my little home away from home. Here, you will get to know me. I'll share my likes, hobbies, and more. Every now and then, I'll even have something interesting to say in a blog post.</p>
  15. <!-- /wp:paragraph -->
  16. <!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
  17. <div class="wp-block-buttons"><!-- wp:button {"className":"is-style-outline"} -->
  18. <div class="wp-block-button is-style-outline"><a class="wp-block-button__link wp-element-button">See My Popular Posts →︎</a></div>
  19. <!-- /wp:button --></div>
  20. <!-- /wp:buttons --></div>
  21. <!-- /wp:group --></div></div>
  22. <!-- /wp:cover -->

今、WordPressで新しい投稿を追加または編集すると、インサータにパターンが表示されるはずです。パターンタブをクリックして、フィーチャーを選択してください:

パターンインサータが開いているWordPress投稿エディター。フィーチャーサブパネルが選択されており、単一のパターンが表示されています。

また、WordPress管理の外観 > エディター > パターンの下にパターンが表示されるはずです。

PHPを使用してパターンを登録する

  1. PHPでブロックパターンを登録するには、[`````register_block_pattern()`````](https://developer.wordpress.org/reference/functions/register_block_pattern/)関数を使用する必要があります。関数のシグネチャは次のようになります:
  2. ``````bash
  3. register_block_pattern(
  4. string $pattern_name,
  5. array $pattern_properties
  6. ): bool
  7. `

この関数は2つのパラメータを受け取り、パターンが正常に登録されたかどうかに応じてtrueまたはfalseを返します:

  • $pattern_name: namespace/pattern-nameの形式で、パターンに固有の名前空間付きスラッグ。
  • $pattern_properties:
    • content: パターンのブロックマークアップ。
    • title: 翻訳可能な人間が読めるタイトル。
    • categories: パターンが属するカテゴリの配列。
    • description: 登録されたパターンの長い説明。スクリーンリーダーにのみ表示されます。
    • viewportWidth: パターンをプレビューする際の<iframe>ビューポートの幅(ピクセル単位)。
    • inserter: パターンをインサータに表示するかどうか。デフォルトはtrueです。
    • keywords: パターンに関連するキーワードの配列。ユーザーがインサータで検索する際に使用されます。
    • blockTypes: パターンに関連付けるブロックタイプの配列。
    • postTypes: パターンを制限する投稿タイプの配列。デフォルトはすべての投稿タイプです。
    • source: 登録されたパターンのソース。これは、パターンがテーマから来ているため、themeに設定する必要があります。
    • templateTypes: パターンが適合するテンプレートタイプの配列。

PHPを介してパターンを登録する場合は、initフックで行う必要があります。次に、functions.phpにこのコードを追加してカスタムパターンを登録してみてください(contentプロパティにカスタムマークアップを追加することを忘れないでください):

  1. add_action( 'init', 'themeslug_register_patterns' );
  2. function themeslug_register_patterns() {
  3. register_block_pattern( 'themeslug/hero', array(
  4. 'title' => __( 'Hero', 'themeslug' ),
  5. 'categories' => array( 'featured' ),
  6. 'source' => 'theme',
  7. 'content' => '<!-- Block pattern goes here. -->'
  8. ) );
  9. }

条件付きでパターンを登録する

パターン全体を条件付きで登録する必要がある場合、登録方法に応じて2つの方法を選択できます。

パターンフォルダーでの条件付きパターン登録

テーマの/patternsフォルダーにパターンを配置する自動登録方法を使用している場合、条件付きで登録する真の方法はありません。この場合、パターンを登録解除する必要があります。

たとえば、以前に登録したヒーローパターンをcore/paragraphブロックが登録されている場合にのみ利用可能にしたいとします。実際のシナリオでは、サードパーティのブロックを確認することが多く、core/paragraphブロックはこの例のためだけに使用されます。

以前に登録したパターンを登録解除するために、functions.phpファイル内にこのコードを試してみてください:

  1. add_action( 'init', 'themeslug_unregister_patterns', 999 );
  2. function themeslug_unregister_patterns() {
  3. if ( WP_Block_Type_Registry::get_instance()->is_registered( 'core/paragraph' ) ) {
  4. unregister_block_pattern( 'themeslug/hero' );
  5. }
  6. }

上記のコードは、WP_Block_Type_Registryクラスを使用しており、これはサーバー側でWordPressに登録されたすべてのブロックタイプを保存します。このクラスのis_registered()メソッドを使用して、ブロックが登録されているかどうかを判断できます。

register_block_pattern()を介して条件付きでパターンを登録する

PHPを介して手動でパターンを登録した場合、register_block_pattern()への呼び出しを条件チェックでラップするだけで済みます。

上記の例と同様に、core/paragraphブロックが登録されている場合にのみパターンを登録するように、functions.phpにこれを追加してみてください:

  1. add_action( 'init', 'themeslug_register_patterns', 999 );
  2. function themeslug_register_patterns() {
  3. if ( WP_Block_Type_Registry::get_instance()->is_registered( 'core/paragraph' ) ) {
  4. register_block_pattern( 'themeslug/hero', array(
  5. 'title' => __( 'Hero', 'themeslug' ),
  6. 'categories' => array( 'featured' ),
  7. 'source' => 'theme',
  8. 'content' => '<!-- Block pattern goes here. -->'
  9. ) );
  10. }
  11. }

パターンの登録解除

ユーザーにインサータに表示されないようにブロックパターンを登録解除する必要がある場合があります。たとえば、コアのWordPressパターンの一部、親テーマによって追加されたもの(子テーマを構築している場合)、またはサードパーティのプラグインによって追加されたものを削除したい場合があります。

単一のブロックパターンを登録解除する必要がある場合は、unregister_block_pattern()関数を使用します:

  1. unregister_block_pattern( string $pattern_name ): bool

パターンを登録する際と同様に、initフックで登録解除することをお勧めします。パターンは一般的に(ただし常にではありません)10のデフォルト優先度でinitで登録されるため、コードが後で実行されるように高い優先度を使用する必要があります。

以前に作成したカスタムパターンを登録解除するには、functions.phpファイルにこのコードを追加してみてください:

  1. add_action( 'init', 'themeslug_unregister_patterns', 999 );
  2. function themeslug_unregister_patterns() {
  3. unregister_block_pattern( 'themeslug/hero' );
  4. }

コアパターンの削除

  1. すべてのコアWordPressパターンを削除するには、テーマの`````functions.php`````ファイルにこのコードを追加します:
  2. ``````bash
  3. add_action( 'after_setup_theme', 'themeslug_remove_core_patterns' );
  4. function themeslug_remove_core_patterns() {
  5. remove_theme_support( 'core-block-patterns' );
  6. }
  7. `

リモートパターンの無効化

WordPressは、公式のパターンディレクトリからリモートでいくつかのパターンを自動的に読み込みます。これらのパターンがテーマデザインに合わない場合など、これらのパターンを読み込みたくない状況がいくつかあります。また、クライアントのために構築しているサイトでリモートAPIを呼び出すことを選択しない場合もあります。いずれにせよ、should_load_remote_block_patternsフックをフィルタリングすることでこれを無効にできます。

リモートパターンを無効にするには、functions.phpファイルにこのコードを追加します:

  1. add_filter( 'should_load_remote_block_patterns', '__return_false' );

パターンカテゴリ

WordPressには、デフォルトで登録されるいくつかのブロックパターンカテゴリがあります:

  • featured
  • about
  • audio(WordPress 6.4で追加)
  • banner
  • buttons
  • call-to-action
  • columns
  • contact
  • footer
  • gallery
  • header
  • media
  • portfolio
  • posts
  • querypostsを使用)
  • services
  • team
  • testimonials
  • text
  • video(WordPress 6.4で追加)

一般的には、テーマにこれらのデフォルトカテゴリを使用するのが最善です。これにより、ユーザーが慣れ親しんだ一貫したUIが保たれます。しかし、独自のカテゴリを追加したり、すでに登録されているカテゴリを削除したりしたい場合もあります。

この記事のこのセクションでは、カスタムブロックパターンカテゴリを登録および登録解除する方法を学びます。

パターンカテゴリの登録

1つまたは複数のパターンを配置するためのカスタムカテゴリを登録するには、register_block_pattern_category()関数を使用する必要があります:

  1. register_block_pattern_category(
  2. string $category_name,
  3. array $category_properties
  4. ): bool

この関数は2つのパラメータを受け取ります:

  • $category_name: カテゴリのユニークなID/スラッグ。これをテーマスラッグでプレフィックスするのが良いプラクティスです(例: themeslug-category-name)。
  • $category_properties: カテゴリに関するさらなるデータを定義するためのプロパティの配列:
    • label: 翻訳可能なカテゴリの人間が読めるラベル/タイトル。
    • description: 翻訳可能なカテゴリの説明。

テーマのfunctions.phpファイルにこのコードを追加して、新しいカスタムパターンカテゴリを追加してみてください:

  1. add_action( 'init', 'themeslug_register_pattern_categories' );
  2. function themeslug_register_pattern_categories() {
  3. register_block_pattern_category( 'themeslug/custom', array(
  4. 'label' => __( 'Theme Name: Custom', 'themeslug' ),
  5. 'description' => __( 'Custom patterns for Theme Name.', 'themeslug' )
  6. ) );
  7. }

次に、任意のブロックパターンにthemeslug/customカテゴリを追加してみてください:

  1. <?php
  2. /**
  3. * Title: Hero
  4. * Slug: themeslug/hero
  5. * Categories: featured, themeslug/custom
  6. */
  7. ?>
  8. <!-- Your block markup goes here. -->

このカテゴリに登録されたパターンは、インサータおよび外観 > エディター > パターン(クラシックテーマの場合は外観 > パターン)に表示されるようになります:

サイトエディターのWordPressパターンライブラリ。カスタムカテゴリが選択されており、単一のパターンプレビューが表示されています。

パターンカテゴリの登録解除

登録されたパターンカテゴリを登録解除するには、unregister_block_pattern_category()関数を使用する必要があります:

  1. unregister_block_pattern_category( string $category_name ): bool

この関数は1つのパラメータを受け取ります:

  • $category_name: 登録解除するカテゴリの名前(すなわちスラッグ)。
  1. ``````bash
  2. add_action( 'init', 'themeslug_unregister_pattern_categories' );
  3. function themeslug_unregister_pattern_categories() {
  4. register_block_pattern_category( 'themeslug/custom' );
  5. }
  6. `