8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WordPressのGutenbergに自作のブロックを追加する(実用性は無し)

Last updated at Posted at 2017-10-02

WordPressのGutenbergを見て未来を感じたのでいじってみました。

Gutenberg自体が開発途上だったり、Reactのこととかあったりしするので、コード自体は結構ムダ知識なんですが、こんなことができるんだよ。というメモがわり。

環境

− WordPress

  • Gutenberg 1.2.1

カスタムブロックの追加手順

  1. プラグインファイルの作成
  2. block.jsの作成
  3. 必要に応じてスタイルシートの作成

です。簡単なブロックならあっというまに追加できてしまいます。

猫のイラストを挿入できるカスタムブロック

上記を作成してみました。
プラグインとして、Gutenberg 1.2.1 が動いているWordPressにインストールしていただければ動くと思います。

猫のイラストが挿入できる・・だけのカスタムブロックです。
スクリーンショット 2017-10-02 17.31.47.png
こんなやつ。

プラグインファイルの作成

プラグインファイルを作成します。
大したことはしていないです。ブロックを実際にコントロールするblock.jsを読み込んでいるだけです。
あとは、それのスタイルシートです。(エディタ側、表示側の両方を作成します)

nyankoblock.php
//エディタ側
add_action( 'enqueue_block_editor_assets', function () {
	//ブロック用のjs
	wp_enqueue_script( 'nyanko-block01', plugins_url( 'block.js', __FILE__ ), array( 'wp-blocks', 'wp-element' ));

	$plugin_url = plugin_dir_url( __FILE__ );
	wp_localize_script( 'nyanko-block01' , 'mywp' , array( 'plugin_url' => $plugin_url ) );

	//エディタ側のスタイル
  wp_enqueue_style( 'nyanko-block01-editor', plugins_url( 'editor.css', __FILE__ ),array( 'wp-edit-blocks' ),filemtime( plugin_dir_path( __FILE__ ) . 'editor.css' ));

});

//表示側のスタイル
add_action( 'enqueue_block_assets', function () {
	wp_enqueue_style( 'nyanko-frontend', plugins_url( 'style.css' , __FILE__ ), array( 'wp-blocks' ), filemtime( plugin_dir_path( __FILE__ ) . 'editor.css' ));
});

block.jsの作成

実際にブロックの動作はこれでコーディングします。React.jsです。(2017-09-30現在)

block.js
( function() {
	var el = wp.element.createElement;
	var registerBlockType = wp.blocks.registerBlockType;

	registerBlockType( 'shin1kt/nyanko', { //任意の名前 プリフィックス的
		title: 'nyanko', // ブロック名
		icon: function(){
			//ブロックアイコン imgタグとかでもOK
			return el(
				'img',
				{src: mywp.plugin_url + '/neko-icon.svg',class:'nyanko-icon'}
			);
		},
		category: 'common',//ブロックのカテゴリ

		edit: function( props ) {
			//エディタ画面で挿入される要素
			return el(
				'div',
				{
					class: 'nyan-block',
				},
				React.createElement('div', {class:'nyan-ballon'},
					React.createElement('p', {},'にゃーん')
				),
				React.createElement('img', {src: mywp.plugin_url + '/neko.svg'})
			);
		},


		save: function( props ) {
			//表示側でのHTML要素
			return el(
				'div',
				{
					class: 'nyan-block',
				},
				React.createElement('div', {class:'nyan-ballon'},
					React.createElement('p', {},'にゃーん')
				),
				React.createElement('img', {src: mywp.plugin_url + '/neko.svg'})
			);
		},
	} );
})();

とにかく動きを覚えるために最低限のコードのみ
固定のHTMLを挿入するブロックです。

icon:ブロックのアイコンの見た目や名前
category:ブロックの表示場所
edit: 編集画面で挿入される要素
save: 表示側のHTML要素

上記を設定してあげるだけです。

あとはスタイルとかを書いてあげれ動きます。

以上。

実際には、これからバージョンアップで変わるかもだし、そもそもReact以外で書き直しになったら上記コードはムダ知識になんですが、将来的にGutenbergがリリースされたときには、いろいろな便利なカスタムブロックを作れるようになるといいな。と思う今日このごろ。

そんなWordPressの未来をすこし感じたくて学んでみました。(^^

参考

https://github.com/WordPress/gutenberg/tree/master/blocks
https://github.com/ahmadawais/Gutenberg-Boilerplate

猫のイラストはこちらのを使わせていただきました。

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?