概要
以下のチュートリアル> [ 第3章 テンプレート、パーツ、パターン ]
をおこなった記録。(※ チュートリアルの不備が多発したため、途中で中断 )
前の記事:
環境
wordpress-develop ( Docker コンテナ の WordPress 環境 ) を使用。
docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d844c2f7de74 vsc-src-ee47b25aac09ed2997b68384d2745e464f536bafa1aac67d1b823b83b7420469-uid "/bin/sh -c 'echo Co…" 23 hours ago Up 9 minutes brave_chaum
b4c47afb9392 nginx:alpine "/docker-entrypoint.…" 4 days ago Up 3 hours 0.0.0.0:8889->80/tcp wordpress-develop-wordpress-develop-1
673565aa0f6f wordpressdevelop/cli:latest "/entrypoint.sh slee…" 4 days ago Up 3 hours 9000/tcp wordpress-develop-cli-1
401fdd352ccf mysql:8.4 "docker-entrypoint.s…" 4 days ago Up 3 hours (healthy) 33060/tcp, 0.0.0.0:64663->3306/tcp wordpress-develop-mysql-1
4afec5543cb5 wordpressdevelop/php:latest "/entrypoint.sh /bin…" 4 days ago Up 3 hours 9000/tcp wordpress-develop-php-1
# PHP 8.2
docker exec -it wordpress-develop-php-1 php -v
PHP 8.2.29 (cli) (built: Aug 4 2025 20:53:17) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.2.29, Copyright (c) Zend Technologies
with Zend OPcache v8.2.29, Copyright (c), by Zend Technologies
1. ブロックパターン
What is a block pattern?
A block pattern is a group of blocks that you combine to create reusable layout elements and page sections. Technically, patterns use the markup of individual blocks. This markup includes the HTML comment with the block attributes and the block content itself, such as text and links to images.
ブロックパターンとは
ブロックパターンはブロックのグループで、それを組み合わせると、再利用可能なレイアウトの要素とページのセクションを作成できます。技術的にはパターンは各ブロックのマークアップです。このマークアップにはブロック属性を持った HTMLのコメントと、テキストや画像へのリンクといったブロックそれ自体が含まれています。
How do theme developers and designers benefit from block patterns?
By creating your own pattern library, you can create time-saving layouts that look and feel unique with only minor changes.
テーマ開発者とデザイナーにとってブロックパターンにどんな利点がありますか?
自分自身のパターンライブラリを作成することによって、小さな変更を加えるだけで、ユニークな見た目と印象のレイアウトを手早く作成できます。
1-1 ユーザー作成のパターン
ブロックパターンの作成
サイトエディター
Appearance > Editor > Patterns
Click [Add pattern] Button ( At the right top corner)
WordPress 6.3では、サイトエディター にパターン用の新しいインターフェースが追加されました。このインターフェースはブロックテーマでのみ利用可能です。
この投稿シリーズでは、Create Theme Block というプラグインで作成したブロックテーマを使用しています。
まだ何もパターンを作成していない状況では以下のスクショのようになります。
右上の [Add pattern] ボタンをクリックし、新しいパターンを作成 します。
Name: test
Click [Add] Button
( an the right buttom corner of the "Add Pattern" window )
パターン名を入力し、[Add] ボタンを押すと、以下のようになります。
ブロック(例えば段落)を作成し、[Save] をクリックしてブロックパターンを作成 します。
作成したブロックパターンの確認
You can choose between different pattern categories in the Site Editor sidebar.
The sidebar lists all user-created patterns under the heading “My patterns”.サイトエディターのサイドバーでは、様々なパターンのカテゴリーから選択できます。サイドバーには、"My patterns" という見出しの下に、ユーザーが作成したすべてのパターンが一覧表示されます。
チュートリアルの説明通り、先ほど作成したパターンをサイトエディターから確認できます :
Appearance > Editor >
Patterns > "My patterns"
ただし、以下のように書いてあります。
You can edit, copy, and delete user-created patterns. But you can not edit patterns from themes and plugins directly, because they are not saved in the WordPress database.
ユーザーが作成したパターンは編集、コピー、削除できます。ただし、テーマやプラグインのパターンはWordPressデータベースに保存されていないため、直接編集することはできません
要するに、テーマやプラグインのパターンはデータベースに保存されません。
(それらを利用する場合は、まず複製しなければいけません。)
1-2 パターンエクスプローラー
パターンエクスプローラーとは
パターンエクスプローラーでは、テーマ、プラグイン、WordPressコアで提供されているパターンや、WordPress.orgパターンディレクトリの注目アイテムを検索できます。
ただし:
I want to mention the pattern explorer because it is important to know that it is not possible to edit, create, or delete block patterns from this screen.
パターンエクスプローラーについて説明するのは、この画面からブロックパターンを編集、作成、または削除することはできないことを知っておくことが重要だからです。
Click "+" icon at the top left corner
At the bottom of the left side bar, click "Explorer all pattern"
ちなみに 左サイドバーの All と My pattern には自分が作成し、編集可能なパターンが表示されます。
About, ...etc. には既成のパターンが表示されます。
1-3 ブロックパターンの登録
1-2 の文脈から、「じゃあ自分で作ったパターンをパターンエクスプローラーにどうやって上げんの?」っていう話の流れで、このセクションは見ていこうと思います。
- きっと、テーマ及びプラグイン開発者が、自分が作ったブロックパターンをパターンエクスプローラーに上げる方法の話では?
(GitHubのローカルリポジトリにプッシュするイメージ?)
ただし、チュートリアルにもありますが、wp_block 投稿タイプを使わずに、 (同期パターンではない) ブロックパターンを登録します。
追記:
なんでブロックパターンをパターンエクスプローラーにあげるというステップがあるのか、という素朴な疑問について。
以下、公式より
Why a plugin?
While it is not a requirement to develop a block as part of a plugin, it’s generally the recommended approach.
One of the main reasons for this is that custom blocks are not allowed in themes that are submitted to the WordPress.org theme directory.
However, if you are developing a theme for your own use, or for a client, you can include custom blocks in your theme, the difference is that you register the blocks in a different way.
Ultimately though the block development experience and tooling is designed to work best with plugins
長文なので太字を含む段落だけ訳すと、以下のようになります:
(ブロックをプラグインの一部として作成する) 主な理由の一つは、Wordpress.org のテーマディレクトリに送信されていないテーマではカスタムブロックが許可されていないためです。
太字の次の段落を読めばわかりますが、プラグインとしてカスタムブロック ( たとえば Ninja Forms のフォームのブロック)を使用する には、functions.php
等でその ブロックを登録する 必要があるということです。
プラグインとテーマがパターンを追加する方法:
① functions.php
-
register_block_pattern()
( PHP 関数 ) - init フック
② patternsフォルダ
- テーマは、patternsというフォルダ内にPHPファイルを配置することでもパターンを登録できる。
Ninja Formsが提供する連絡フォームを使用してスタイルを設定する
【① functions.php でのやり方】
function test_block_pattern() {
// プラグインがアクティブかどうかを確認
if ( function_exists( 'ninja_forms' ) ) {
register_block_pattern(
'test/contact-form',
array(
'title' => 'Test block pattern registeration', // The visible name in the editor
'content' => '<!-- wp:paragraph -->
<p>This is only a testing pattern with a paragraph.</p>
<!-- /wp:paragraph -->', // The block markup
)
);
}
}
add_action( 'init', 'test_block_pattern' );
上記の functions.php はどこに置けばいいかって話ですが、
wp-includes/functions.php
-
wp-content/themes/
themename/functions.php
の2つある。
vscode ➜ /workspaces/wordpress-develop/src (trunk) $ find ./ -path "*functions.php*"
./wp-admin/upgrade-functions.php
./wp-admin/admin-functions.php
./wp-includes/rss-functions.php
./wp-includes/ms-functions.php
./wp-includes/registration-functions.php
./wp-includes/functions.php
./wp-content/themes/twentyten/functions.php
./wp-content/themes/twentyeleven/functions.php
./wp-content/themes/twentytwentytwo/functions.php
./wp-content/themes/twentyseventeen/inc/template-functions.php
./wp-content/themes/twentyseventeen/inc/icon-functions.php
./wp-content/themes/twentyseventeen/functions.php
./wp-content/themes/twentysixteen/functions.php
......
テーマハンドブックという公式の説明には、「テーマの」 functions.php
で アクションを追加 ( add_action()
)する方法を書いてあるので、wp-content/themes/
themename/functions.php
にfunctions.php
を作成します。
パターンにブロックマークアップを追加する方法
ブロックエディターからパターンのマークアップをコピーします。パターンの外側のブロックを選択し、ブロックツールバーから「コピー」 を選択します。
次に、マークアップを ( functions.phpのegister_block_pattern() に )content
パラメータの値として貼り付けます
サイトエディタ
Dashboard の Appearance > Editor
Pattern > ブロックを選択して "Copy styles"
コピーされたコード:
<!-- wp:paragraph -->
<p>This is only a testing pattern with a paragraph.</p>
<!-- /wp:paragraph -->
これを register_block_pattern()
の content
に上のコードを貼り付けます。
Ninja Forms をインストールする
パターンに追加する連絡フォームのプラグインをインストールします。
Plugins >Add Plugins
Search "Ninja Forms" > Install Now > Activate
Ninja Forms の HTML を取得
register_block_pattern() に追加するパターンとして、ninja form の HTML を貼り付けます。
register_block_pattern(
'test/contact-form',
array(
'title' => 'Test block pattern registeration', // The visible name in the editor
'content' => '<!-- wp:paragraph -->
<p>This is only a testing pattern with a paragraph.</p>
<!-- /wp:paragraph -->
+ <!-- wp:heading {"textAlign":"center","style":{"typography":{"fontSize":60}}} -->
+ <h2 class="wp-block-heading has-text-align-center" style="font-size:60px">' . __( 'Book an appointment', 'text-domain' ) . '</h2><!-- /wp:heading -->
+ <!-- wp:ninja-forms/form {"formID":1,"formName":"Contact Me ( ID: 1 )"} -->
+ <div class="wp-block-ninja-forms-form">[ninja_forms id=1]</div>
+ <!-- /wp:ninja-forms/form -->', // The block markup
)
);
Patterns > All patterns
なんか、パターンエクスプローラ上のサムネイルを見た感じ、Ninja Forms が正しく認識されていなさそうですが。
あとで治そう ( Ninja Forms の公式のマニュアルみずにチュートリアルからコピっただけなので )
→ Dashboard > Ninja Forms
Add New
Blank Form
右側のパネルから、フォームに入れたい要素を選択。(名前、苗字、段落テキスト)
Submitボタンは、選択しなくても自動で作成されました。
Paragraph Text の右上歯車アイコン >
Label: Message
右上の "→" アイコンをクリックし、作成。
右上の PUBLISH
Form name を入力し、PUBLISH
ショートコード ([ninja_form id=2]
) をコピーし、registerr_block_pattern()
の content
に貼り付けます。
register_block_pattern(
'test/contact-form',
array(
'title' => 'Test block pattern registeration', // The visible name in the editor
'content' => '<!-- wp:paragraph -->
<p>This is only a testing pattern with a paragraph.</p>
<!-- /wp:paragraph -->
<!-- wp:heading {"textAlign":"center","style":{"typography":{"fontSize":60}}} -->
<h2 class="wp-block-heading has-text-align-center" style="font-size:60px">' . __( 'Book an appointment', 'text-domain' ) . '</h2><!-- /wp:heading -->
- <!-- wp:ninja-forms/form {"formID":1,"formName":"Contact Me ( ID: 1 )"} -->
- <div class="wp-block-ninja-forms-form">[ninja_forms id=1]</div>
- <!-- /wp:ninja-forms/form -->', // The block markup
+ <!-- wp:ninja-forms/form {"formID":2,"formName":"Book an appoinment ( ID: 2 )"} -->
+ <div class="wp-block-ninja-forms-form">[ninja_form id=2]</div>
+ <!-- /wp:ninja-forms/form -->'
)
);
しかし、サムネを拡大してみると。。。
"Block contains unexpected or invalid content." ( 「ブロックに予期しないあるいは無効な内容が含まれています。」 ) と書いてあります。なんでやねん。
パターンエクスプローラ のところで書きましたが、 "All patterns" に登録した パターンは、編集できません。なので、編集するには複製 ( Duplicate ) します。
複製された方を開きます。
"Attempt recovery" を押してみましたが、フォームが正しく表示されません。
エディター ( Appearance > Editor >Patterns ) 上で Ninja Forms のフォームを選択し、ブロックツールバーから "Copy" してから content
にHTMLを貼り付けてみましたが、再度エディタを読み込んでも変わりませんでした。
チュートリアル通りでうまくいっていないので、スルー。
【② patternsフォルダでのやり方】
functions.php でやったのと同じことを別の方法でやります。
テーマ(プラグインは除く)は、特定のファイルヘッダーを持つPHPファイルをpatternsというフォルダに追加することでパターンを登録できます。
テーマフォルダのルートに "patterns" という新しいフォルダを作成します。
追加したいパターンごとにPHPファイルを1つ作成し、patternsフォルダに配置します。
テーマフォルダの下にpattern フォルダを作ります。
patterns フォルダの中に以下の footer-links.php を作成します。コードはチュートリアルまんまです。
<?php
/**
* Title: Footer links -The visible name in the pattern inserter
* Slug: theme-slug/footer-links
* Categories: text, site-footer
* Description: A description of the pattern
* Keywords: footer, links, copyright, keywords used in the search
* Block Types: core/navigation, core/site-title, core/social-links
*/
?>
<!-- wp:group {"layout":{"type":"flex","allowOrientation":false,"justifyContent":"space-between"}} -->
<div class="wp-block-group"><!-- wp:group {"layout":{"type":"flex","allowOrientation":false}} -->
<div class="wp-block-group"><!-- wp:paragraph {"fontSize":"extra-small"} -->
<p class="has-extra-small-font-size">
<?php echo esc_html__( 'Copyright', 'text-domain' ) . ' ' . date_i18n( _x( 'Y', 'copyright date format', 'text-domain' ) ); ?></p><!-- /wp:paragraph -->
<!-- wp:site-title {"level":0, "fontSize":"extra-small"} /-->
<!-- wp:social-links {"className":"is-style-logos-only"} -->
<ul class="wp-block-social-links has-icon-color is-style-logos-only"><!-- wp:social-link {"url":"https://wordpress.org","service":"wordpress"} /--></ul>
<!-- /wp:social-links -->
</div><!-- /wp:group -->
</div><!-- /wp:group -->
うーん。コードを書いただけでは、パターン ( Editor> Patterns ) の UI 上に反映されていませんね。チュートリアルにも書いてくれていなそうだし。
<!-- 追記1: -->
-
phpファイルの上部コメント内、
Categories
(text
,site-footer
) が、Patterns UI 左側にリストされている、登録済みパターンのカテゴリーに対応しているみたいです。
よく探せば、上のphpファイルで追加したパターンが登録されていそうです。 -
参考:下記リンクの例では "featured" ( おすすめ ) にパターンが登録されています。
<!-- 追記2: -->
- 上の公式のリンクに書かれているデフォルトのカテゴリーの中に、
text
,site-footer
はないので、デフォルトで存在するfeatured
にカテゴライズした方が確実だと思います。
デフォルトにないなら、まずカテゴリーを作成する必要があるのが普通の流れですが、チュートリアルではそのへんの説明が抜けています。
<!-- 追記3: -->
-
確認したら パターンエクスプローラー( Patterns explorer/ Site editor > Patterns > + icon> "Explore all patterns" ) で
text
のカテゴリに表示されていました。 -
また、サイトエディタ ( Dashboard> Appearance> Editor> Patterns ) には All patterns に表示されていました。
<!-- 追記ここまで: -->
3章は、なんか雑ですね。チュートリアルの執筆者が変わったのかな?
このチュートリアル、中断します。
っつーわけで、3章は見切りをつけて続きはやらないことにします。ネットをあさればチュートリアルはやまほどあるので、やる価値のないチュートリアルに割くほど人生長くないんでね。
ちなみに続きのセクション内容:
-
ブロックパターンのカテゴリ
- ユーザーが作成したブロックパターンのカテゴリ
- ブロックパターンにCSSクラスを追加する方法
- ブロックパターンを削除する方法
- パターンディレクトリからブロックパターンが読み込まれないようにする方法
- ブロックパターンカテゴリの削除
-
ブロックテンプレートにパターンを配置する方法
→ 補足記事を作成しました: WordPressブロックテンプレートにパターンを使用できないバグか?
- パターンディレクトリからパターンを組み込む方法
- 新しいページを作成するときにパターン選択を表示する方法
- 新しいテンプレートを作成するときにパターン選択を表示する方法
- インサータからブロックパターンを隠す方法
- ブロックパターン内でテンプレートパーツを使用する方法
- ソースパラメータを使用して、パターンがテーマまたはプラグインからのものであるかどうかを示す方法
- ブロックパターンのトラブルシューティング
- ブロック パターンにはデフォルトのコンテンツを含める必要がありますか?
ブロックパターンを HTML で満足に作成できないのに、CSS を設定したり、ブロックテンプレートにパターンを組み込んだり、 逆に ブロックパターンにテンプレートを組み込んだりする 方法を学んでも意味が半減しますね。やはり中止するべきでしょう。他のチュートリアルをやろうと思います。
他のチュートリアルをやった記録↓
- ブロックテンプレートにパターンを配置する方法について