ジェネレーターを使わないで、ゼロからBlockを作ってみます。 

この記事の、参考サイトというか、元ネタは、WordPress Gutenberg Handbookのチュートリアルです。そこにある、Gutenberg Example の 01-basic を使っています。(※ 2018/12/18現在だと、そのまま参考サイトのgithubにあるサンプルコードを使うとエラーになってしまうので、エラーが出るところを修正して載せています。)

wordpressのプラグインフォルダ (私の環境だと、/var/www/html/wp-content/plugins ) に「first-block」というフォルダを作成して、その中にファイルを二つ「index.php」と「block.js」作成します。最低限この二つのファイルがあれば、blockとして動かせるみたい。

index.php に Enqueuing Block Scripts

こっちは、blockのjavascriptファイル用設定ファイルのような位置付け、pluginとしての情報色々を書き込むファイルかな。

ソースの最初にあるコメント、{Plugin Name、Description、… } は WordPress管理画面の設定にある Plugins に表示される一覧の名称、説明だと思われる。

「wp_register_script」BlockのjavascriptへのPATH、実装する機能のArray

addAction(‘init’, …) で function「gutenberg_examples_01_register_block」を読み込んでいて、

「register_block_type」block-typeに ‘gutenberg-examples/example-01-basic’ を指定。これは、javascript側のregisterBlockTypeと紐付けかな。さらにその中の「editor_script」は、上の「wp_register_script」と紐づいていそう。

<?php

/**
 * Plugin Name: Gutenberg Examples Basic
 * Plugin URI: https://github.com/WordPress/gutenberg-examples
 * Description: This is a plugin demonstrating how to register new blocks for the Gutenberg editor.
 * Version: 1.0.2
 * Author: the Gutenberg Team
 *
 * @package gutenberg-examples
 */

defined( 'ABSPATH' ) || exit;

function gutenberg_examples_01_register_block() {
	if ( ! function_exists( 'register_block_type' ) ) {
		// Gutenberg is not active.
		return;
	}
	wp_register_script(
		'gutenberg-examples-01',
		plugins_url( 'block.js', __FILE__ ),
		array( 'wp-blocks', 'wp-i18n', 'wp-element' ),
		filemtime( plugin_dir_path( __FILE__ ) . 'block.js' )
	);
	register_block_type( 'gutenberg-examples/example-01-basic', array(
		'editor_script' => 'gutenberg-examples-01',
	) );

    if ( function_exists( 'wp_set_script_translations' ) ) {
        wp_set_script_translations( 'gutenberg-examples-01', 'gutenberg-examples');
    }
}
add_action( 'init', 'gutenberg_examples_01_register_block' );

block.js に Registering the Block

こっちは、blockの中身、「blocks.registerBlockType」のところは、index.phpで書いたのと同じ値。

functionの最後のかっこのところで、index.phpで array( ‘wp-blocks’, ‘wp-i18n’, ‘wp-element’ ) として指定したライブラリを引数に受け取ってるのかな。あとは、タイトル、アイコンなどがあって、function「save, edit」のところでは、blockのedit, saveを行う時の html を書けるっぽい。

( function( blocks, i18n, element ) {
	var el = element.createElement;
	var __ = i18n.__;

	var blockStyle = {
		backgroundColor: '#900',
		color: '#fff',
		padding: '20px',
	};

	blocks.registerBlockType( 'gutenberg-examples/example-01-basic', {
		title: __( 'Example: Basic', 'gutenberg-examples' ),
		icon: 'universal-access-alt',
		category: 'layout',
		edit: function() {
			return el(
				'p',
				{ style: blockStyle },
				'Hello World, step 1 (from the editor).'
			);
		},
		save: function() {
			return el(
				'p',
				{ style: blockStyle },
				'Hello World, step 1 (from the frontend).'
			);
		},
	} );
}(
	window.wp.blocks,
	window.wp.i18n,
	window.wp.element
) );

動作確認

ファイルを配置して、編集が終わったら、動作確認。こんな感じのBlockが使えるようになります。