Toccaville

blog

WordPress管理画面 Gutenbergで独自ブロックを追加

 Akiko Kubo

久保が個人的な勉強を兼ねてやってみたことの記録です。

定期的に書く記事のなかに、毎回決まったフォーマットの部分があったら、そこは毎回同じ内容を手入力するのは少し手間ですよね。ボタン一つで挿入できたら便利です。

私の場合は、例えば下記のような「タイトルと箇条書きのセット」を毎日入力するのが面倒で、Gutenbergにカスタムブロックを追加してみました。箇条書きの部分に毎日違う内容を入れます。

完成形のスクリーンショット

ブロックの選択画面で「今日できたこと」が選択できるようになり、

箇条書きのひとつめが表示された状態で、編集画面に挿入されます。

箇条書きの中身を書いてenterを押すごとに、冒頭に数字が入った行が増えていきます。

用意したファイル

プラグインフォルダ配下に「my-gutenberg」フォルダを作り、block.js, index.phpを置いておく。WP管理画面のプラグイン一覧で有効化する。

具体的な記述

block.js

(function () {
    var el = wp.element.createElement,
        blocks = wp.blocks,
        RichText = wp.editor.RichText;

    blocks.registerBlockType('my-gutenberg/list', {
        title: '今日できたこと',
        icon: 'universal-access-alt',
        category: 'common',
        attributes: {
            content: {
                type: 'array',
                source: 'children',
                selector: '.list-decimal',
            },
        },
        edit: function (props) {
            var content = props.attributes.content;
            return el(
                'p', 
                {},
                '今日できたこと:',
                el(
                    RichText,
                    {
                        tagName: 'ol',
                        multiline: 'li',
                        className: 'list-decimal',
                        value: content,
                        onChange: function (newContent) {
                            props.setAttributes({ content: newContent });
                        }
                    }
                )
            );
        },
        save: function (props) {
            return el(
                'div', 
                {},
                '今日できたこと:',
                el(
                    RichText.Content, {
                    tagName: 'ol',
                    className: 'list-decimal',
                    value: props.attributes.content,  
                    }
                )
            );
        },
    });
})();

index.php

<?php
/**
 * Plugin Name: My Gutenberg
 */

function my_gutenberg_example() {

  // ブロック用のスクリプトを登録
  wp_register_script(
    'my-gutenberg-script',
    plugins_url( 'block.js', __FILE__ ),
    array( 'wp-blocks', 'wp-element' ),
    '1.0.0',
    true
  );
  // ブロックの定義を登録
  register_block_type( 'my-gutenberg/list', array(
    'editor_script' => 'my-gutenberg-script',
  ) );
}
add_action( 'init', 'my_gutenberg_example' );

以上です。ちょっとしたことですが少し便利になりました。

もう少しやってみたいことがあるので、それは後日別に書きたいと思います。

参考にさせていただいた記事

WordPressの新エディタ「Guternberg」でカスタムブロックを追加する方法(基礎編)

Gutenbergにオリジナルなブロックを作成する方法(動的編)