WordPress

registerBlockVariationで、WordPressのコアブロックを拡張したブロックを作ってみる

WordPressにはデフォルトでさまざまなブロックが用意されていますが、ブロックをカスタマイズしたい場合もあります。そのようなケースでは、「ブロックの拡張方法」が役立ちます。まず、create-blockコマンドなどを使用してブロックプラグインをセットアップし、registerBlockVariation関数を追加します。これにより新しいブロックが作成されます。また、コードでブロックの設定値をカスタマイズすることもできます。さらに、inserterプロパティを使用すると、コマンドや本文内からもブロックを追加できます。innerBlocksプロパティを利用すると、子ブロックも指定できます。カスタムブロックを作成する際には、保守コストに注意しながら検討することが重要です。

広告ここから
広告ここまで

WordPressには、デフォルトでさまざまなブロックが用意されています。しかし案件によっては、「このブロックをすこしカスタマイズしたブロックが欲しい。ただ、そのためにReactとかを書くのもなぁ・・・」というケースが稀によくあります。そんな時に使える、「ブロックの拡張方法」をまとめました。

registerBlockVariationで、既存のブロックをカスタマイズする

create-blockコマンドなどでブロックプラグインをセットアップした後、src/index.jsregisterBlockVariation関数を追加しましょう。editsaveは必要ありませんので、Reactなどを書く必要はありません。

import { registerBlockVariation } from '@wordpress/blocks';

registerBlockVariation(
    'core/query', 
    {
        name: "custom-plugin/custom-posts",
        title: "Custom Posts",
        description: "Custom post query",
    }
)

とてもシンプルなコードですが、これを保存してビルドするだけで新しいブロックが増えています。

ブロックの設定値をカスタマイズする

デフォルトのブロックの値をコードでカスタマイズできます。例えば固定ページのデータを取得するブロックにしたい場合は、attributes.query.postTypepageに設定しましょう。

registerBlockVariation(
    'core/query', 
    {
        name: "custom-plugin/custom-posts",
        title: "Custom Posts",
        description: "Custom post query",
        attributes: {
            namespace: "custom-plugin/custom-posts",
            query: {
                postType: 'page',
            }
        }
    }
)

この状態でブロックを追加すると、デフォルトで表示するデータが固定ページになっています。

エディタ内で追加できるようにする

scopeinserterを設定してみましょう。

registerBlockVariation(
    'core/query', 
    {
        name: "custom-plugin/custom-posts",
        title: "Custom Posts",
        description: "Custom post query",
        attributes: {
            namespace: "custom-plugin/custom-posts",
            query: {
                postType: 'page',
            }
        },
        scope: ['inserter']
    }
)

するとコマンドや本文内からも追加できるようになります。

子ブロックの内容も指定する

innerBlocksを利用して、クエリーブロックで追加する子ブロックも指定できます。

registerBlockVariation(
    'core/query', 
    {
        name: "custom-plugin/custom-posts",
        title: "Custom Posts",
        description: "Custom post query",
        attributes: {
            namespace: "custom-plugin/custom-posts",
            query: {
                postType: 'page',
            }
        },
        scope: ['inserter'],
        innerBlocks: [
            [
                'core/post-template',
                {},
                [ [ 'core/post-title' ], [ 'core/post-excerpt' ] ],
            ],
            [ 'core/query-pagination' ],
            [ 'core/query-no-results' ],
        ],
    }
)

この設定では、次のようなブロックがデフォルトで設定されています。

触ってみて

カスタムブロックを作ることで、自由にエディタや表示をカスタマイズできます。ただし作れば作るほどブロックの保守コストが発生するため、カスタマイズ内容によっては、registerBlockVariationで対処できるものかどうかをまず検討するフローで進行した方がよいかもしれません。

参考にした記事

ブックマークや限定記事(予定)など

WP Kyotoサポーター募集中

WordPressやフロントエンドアプリのホスティング、Algolia・AWSなどのサービス利用料を支援する「WP Kyotoサポーター」を募集しています。
月額または年額の有料プランを契約すると、ブックマーク機能などのサポーター限定機能がご利用いただけます。

14日間のトライアルも用意しておりますので、「このサイトよく見るな」という方はぜひご検討ください。

広告ここから
広告ここまで

Related Category posts