My First
Gutenberg Plugin
Ryo Utsunomiya(@ryo511)
Gutenberg MeetUp vol.1
2018-03-01
通常のWordPressプラグインと変わらない
<?php
// index.php
/**
* Register Block JavaScript file.
*/
add_action( 'enqueue_block_editor_assets', function () {
wp_enqueue_script(
'amazon-block',
plugins_url( 'build/index.js', __FILE__ ),
array( 'wp-blocks', 'wp-element' )
);
} );
記事の編集に使用する、再利用可能な部品
import AmazonBlock from '../components/AmazonBlock';
wp.blocks.registerBlockType( 'amazon-block/amazon-block', {
title: 'Amazon',
icon: 'cart',
category: 'common',
attributes: {
// 省略
},
edit( { attributes, setAttributes } ) {
return (
<AmazonBlock
attributes={ attributes }
setAttributes={ setAttributes }
/>
);
},
save( { attributes } ) {
// 省略
},
} );
edit() で初期状態を出力(保存されたコンテンツを編集する際は、以前の状態の復元)
/* global React */
import { EventEmitter } from 'events';
import Search from './Search';
import SelectTemplate from './SelectTemplate';
import AffiliateItem from './AffiliateItem';
export default class AmazonBlock extends React.Component {
// constructorとcomponentDidMount は省略
render() {
const { item, template } = this.props.attributes;
if ( item && template ) {
return <AffiliateItem item={ item } template={ template } />;
} else if ( item ) {
return <SelectTemplate item={ item } event={ this.event } />;
}
return <Search event={ this.event } />;
}
}
WordPressプラグインの作り方(最低限でOK)
ES2015以降のJavaScript(ES.Next)
FLuxアーキテクチャとRedux(wp.data)
最も人気のあるJavaScriptライブラリの1つ
Gutenbergには独特の概念や仕組みがある
Gutenbergを拡張するためのドキュメント
"dependencies": {},
Gutenbergのドキュメントが不足しているので、デバッグ時にはコアのソースを追うことが多かった