2024
01/17

ブロックエディタ以前しか知らないWordPress老人がオリジナルブロックを作ってみる

前回のtheme.json解読に続き、今回はブロックを自作してみようと思います。

ブロックはプラグインとしてインストールする作り方とテーマとして動作する作り方があります。

プラグインとしてインストールする
pluginsフォルダに配置し、管理画面の「プラグイン」から有効化して使用する

テーマとして動作させる
必要なコードをfunctions.phpに書き、テーマを有効化したらブロックが使えるようになっている

通常のプラグインでも同じ処理を使用テーマのfunctions.phpに書けば同じ動きをしますので、それと同じです。

テーマに依存しないようにプラグインとして作成することが推奨されていますので、今回はその方法でやってみます。

@wordpress/create-blockというツールで基本的な雛形を対話式で生成することができます。

ADs

@wordpress/create-blockの使い方

まずは事前にNode.jsのインストールが必要です。

Node.jsはバージョンによってあっちが動いたけどこっちは動かない…ということが多々あるのでバージョン管理ツールを使うのがお勧めです。
私はnvmというツールを使用しています。

参考:
nvm-windows の導入と簡単な操作をやってみた

1.コマンドプロンプトで以下のコマンドを入力します。

いろいろ聞かれますので順に答えていきます。

2.static(静的ブロック)かdynamic(ダイナミックブロック)を選択

ダイナミックブロックは動的に内容を取得して出力内容を変えるものです。
(最新記事一覧のように動的にデータを取得して出力するものや、HTML・CSS・JSの変更がすぐ反映されるブロック)

3.ブロックのスラッグを入力(フォルダ名にもなります)

4.namespaceを入力

namespaceはプラグインの名前になります。
ブロック名がnamespace/block-nameとなります。

5.ブロックの表示名を入力

6.ブロックの説明を入力(任意)

7.ブロックのアイコン名を入力(任意 未入力だとsmileyになる)

このウィザード中ではDashiconsから選択するしかできないが、後ほど自作アイコンを使用することもできます。

8.ブロックの分類を選択

記事編集時のブロック選択画面で自作ブロックがどのカテゴリに属するかを選択します。

9.プラグインとして開発するなら「y」、ブロックのみの雛形を生成するなら「N」を選択します。

「N」を選択するケースは、1つのプラグインの中に複数のブロックを含める際に使用するオプションです。

10.プラグインの解説ページのURLを入力。
配布しないプラグインなら未入力でいいと思います。(任意)

11.プラグインのバージョンを入力。
未入力だと「0.1.0」になります。

12.プラグイン作者の名前を入力(任意)

13.プラグインのライセンスを入力(任意)

14.プラグインのライセンスの説明ページを入力(任意)

15.ブロックを多言語対応する際のテキストドメインを指定します(任意)

ブロックの多言語対応は翻訳ファイルを用意し、load_plugin_textdomainという関数でこのテキストドメインと翻訳ファイルを読み込みます。
多言語対応を行わないのであれば未入力で構いません。

16.ブロックのバージョンアップを行った際の通知先URLを指定します(任意)

ここでURLを指定しておくとブロックの更新を通知することができますが、配布しないブロック/プラグインであれば未入力で構いません。

ここまで入力すれば3で入力した名前でフォルダが作成され、その中に必要ファイルが生成されます。

ブロックの使用方法

このフォルダをまるごとpluginsフォルダ内にコピーするとプラグインとして表示されます。

このプラグインを有効化すれば記事編集画面でブロックとして使用することができます。

@wordpress/create-blockでできあがるブロックは初期状態では
サンプルブロック – hello from the saved content!
と固定文言が表示されるだけのものです。

プラグインフォルダの中身

生成されたフォルダの中身は以下のようになっています。

基本的に手を加えるのはsrcフォルダの中身のみです。
srcの中身は以下の通りです。

srcフォルダの中身

block.json

ブロックの名前やバージョンなどの定義ファイルです。@wordpress/create-blockで入力した内容を元に生成されています。

style.scss

Webサイトと管理画面どちらでも呼ばれるCSSです。

editor.scss

管理画面でのみ呼ばれるCSSです。

index.js

ブロックの登録を行うJSです。ここからsave.js/render.php、edit.js、view.jsが呼ばれます。

save.js(静的ブロックのみ)

save関数の返り値がWebサイト上での出力結果になります。
Webサイトでの表示時の処理を書くファイルです。

render.php(ダイナミックブロックのみ)

ダイナミックブロックにおけるWebサイト上での出力結果です。
静的ブロックのsave.jsと同等のものです。

edit.js

Edit関数の返り値がエディタ上での表示になります。
エディタ上での処理を書くファイルです。

view.js

Webサイト上で任意の(かつ固定の)Javascriptを実行したいときはview.jsファイル内で呼び出します。
Google Analyticsや広告用のJSなどを使用するときに使うものです。

ビルドする

src配下のそれぞれのファイルを修正してもそのままでは修正は反映されません。
ビルドを実行してブロック用ファイルを生成する必要があります。

ターミナルで以下のコマンドを実行します。

また、ファイルの変更を監視して変更があれば随時ビルドするコマンドもあります。
(他の環境ではwatchと呼ばれることが多い)

実際に作ってみる

それでは実際にオリジナルのブロックを作成してみます。
今回は最親階層のカテゴリーを取得し、そのカテゴリー配下の最新記事5件を取得して表示するようなダイナミックブロックを作ってみます。

こんな感じで表示されるものを作ります。

render.php

ダイナミックブロックの場合、render.php内ではWordPressの関数が一通り使用できます。
カテゴリーを取得してforeach、そしてそのカテゴリーIDをクエリとしてget_postsで記事を取得すればいいだけです。

これだけでとりあえずカテゴリーとそれぞれのカテゴリーに所属する最新記事5件を表示するブロックができました。

テスト記事が少ないから5件出てませんが…。

ただ、これで終わりにするのはさすがに簡単すぎるのでサイドバーで記事取得数を設定できるようにしたいと思います。

block.json

まずは記事取得件数として使用する変数を定義します。
block.jsonにattributesという項目を追加し、変数名と型、デフォルト値を入力します。

edit.js

次にサイドバーに設定項目を表示させるため、Editの返り値にInspectorControlsというタグを含めます。

これでサイドバーにドロップダウンのオプション項目を追加することができました。

ドロップダウン以外でもラジオボタンやテキストが利用できますので詳しくはこちらを参照してください。

render.php

上記で保存したオプション項目(articleCount)を出力時に呼び出して記事取得件数として使用します。
block.jsonで定義した変数は$attributesというグローバル変数に入ります。

これで表示記事数のカスタマイズができるカテゴリー+記事一覧ブロックができあがりました。

エディタでの表示を調整する

これだけで十分だと個人的には思いますが、エディタ上での表示が出力時そのままを反映していないので少々不細工です。

ダイナミックブロックにはServerSideRenderという、出力時の表示をエディタ上でも再現する機能があるのでそれを組み込んでみます。

edit.js

これでエディタ上でも出力時と同様の表示が実現できました。

ドロップダウンで取得記事数を変更することですぐに再描画もされます。

まとめ

ということで今回はブロック作成の基本を調べつつカテゴリーや記事を取得して表示するダイナミックブロックを作ってみました。

実際に手を動かしたことでなんとなくフルサイト編集対応テーマについても分かってきたような、まだまだ全然意味不明なような…という感じですが、引き続きやっていきたいと思います。

ADs

Post Comments

メールアドレスが公開されることはありません。