このサイトではアフィリエイト広告(Amazonアソシエイトを含む)を利用しています。

独自ブロック作成

WordPress7.0以降で、PHPを書くと独自ブロックを作成可能になりました。その方法を解説します。

サンプルということで、単に入力したデータを画面に表示する例です。

まずは全体のコードです。

add_action('init', 'mysample_blocks');

function mysample_blocks()
{

    register_block_type(
        'mysample/php-only-block',
        array(
            'title' => 'Sample block',
            'description' => 'サンプルブロック',
            'supports' => array(
                'autoRegister' => true,
            ),
            'attributes' => array(
                'title'   => array(
                    'label' => '見出し',
                    'type'    => 'string',
                    'default' => 'Hello World',
                ),
                'size'    => array(
                    'label' => '大きさ',
                    'type'    => 'string',
                    'enum'    => array( 'small', 'medium', 'large' ),
                    'default' => 'medium',
                ),
                'ratio'   => array(
                    'label'    => '割合',
                    'type'    => 'number',
                ),
                'count'   => array(
                    'label'    => '数',
                    'type'    => 'integer',
                    'default' => 5,
                    'min' => 1,
                    'max' => 10,
                ),
                'enabled' => array(
                    'label' => '有効にする',
                    'type'    => 'boolean',
                    'default' => true,
                ),
            ),
            'render_callback' => 'mysample_render_callback',
        )
    );
}

function mysample_render_callback($attributes) {
    ob_start();
?>
    <div <?php echo get_block_wrapper_attributes(); ?>>
        <?php echo esc_html($attributes['title']); ?>
        <?php echo esc_html($attributes['size']); ?>
        <?php echo esc_html($attributes['ratio']); ?>
        <?php echo esc_html($attributes['count']); ?>
        <?php echo esc_html($attributes['enabled']); ?>
    </div>
<?php
    return ob_get_clean();
}

register_block_type()

WordPress では register_block_type() 関数を使用してブロックを登録します。このとき、

'supports' => array(
    'autoRegister' => true,
)

と書くと、登録した属性 attributes が管理画面で入力・編集可能になります。

編集画面

attributes の候補

※WordPress7.0 時点で利用可能なものです。将来は増える可能性があります。

まずは 文字列 string です。

'attributes' => array(
    'title'   => array(
        'label' => '見出し',
        'type'    => 'string',
        'default' => 'Hello World',
    ),
    'size'    => array( 
        'label' => '大きさ',
        'type'    => 'string',
        'enum'    => array( 'small', 'medium', 'large' ),
        'default' => 'medium',
    ),
)

のように書きます。titlesize となっている部分はプログラム内部の名称です。画面に表示される名称は 'label' => '●●●' のとろこに書きます。

選択式にしたい場合は enum を設定します。この場合編集画面ではセレクトボックスになります。

初期値を指定したい場合は default を設定してください。

続いて数値 number と、 整数 integer です。

'attributes' => array(
    'ratio'   => array(
        'label'    => '割合',
        'type'    => 'number',
    ),
    'count'   => array(
        'label'    => '数',
        'type'    => 'integer',
        'default' => 5,
        'min' => 1,
        'max' => 10,
    ),
)

number は数字を受け入れます。 integer にすると整数のみになります。

最小値を設定したい場合は ‘min’ を、最大値を設定したい場合は max を指定します。

最後は 真偽値 boolean です。

'attributes' => array(
    'enabled' => array(
        'label' => '有効にする',
        'type'    => 'boolean',
        'default' => true,
    ),
)

編集画面ではチェックボックスになります。

表示を行う関数

表示を行う関数を 'render_callback' => 'mysample_render_callback', のように指定します。関数 mysample_render_callback は引数として attributes のデータを受け取ります。

function mysample_render_callback($attributes) {
    ob_start();
?>
    <div <?php echo get_block_wrapper_attributes(); ?>>
        <?php echo esc_html($attributes['title']); ?>
        <?php echo esc_html($attributes['size']); ?>
        <?php echo esc_html($attributes['ratio']); ?>
        <?php echo esc_html($attributes['count']); ?>
        <?php echo esc_html($attributes['enabled']); ?>
    </div>
<?php
    return ob_get_clean();
}

コールバック関数では(画面出力ではなく)データを返す必要があります。このため出力バッファリング ob_start()ob_get_clean() を使っています。

get_block_wrapper_attributes() 関数は、スタイル設定用のクラスを出力します。ブロック編集で「高度な設定」欄でスタイル設定した場合、この関数がスタイル用のクラスを出力します。

$attributes['enabled'] は内部では truefalseです。単純にechoした場合、trueは1を表示し、falseは何も表示しないです。

活用例: ショートコードの置き換え

WP7.0時点では、PHPだけでブロックを作った場合、比較的単純なものになります。とはいえ、旧来はショートコードで作っていたものを置き換える、といった用途には十分役立ちそうです。

ショートコードの画面

ショートコードだと、↑の画像のように、コードを直接書いていかないといけないですし、プレビューもされません。

一方、PHPブロックで作った場合は、↓の画像のようになります。

編集画面

画面右側のサイドバーで編集できます。ショートコード中の変更したい部分だけを編集する形にできるため、編集しやすくなります。また編集ミスが生じにくくなります。

またプレビューもしてくれます。(編集画面内で綺麗にプレビューさせるには編集画面用のCSSが必要になります)

公開日:

↑このページへのリンク