本文内容主要参考 Gutenberg 开发API ,介绍并解读新版WordPress所采用的 Gutenberg 编辑器 ( Block Editor/块编辑器 )如何创建自定义编辑块,包括块的样式以及扩展工具栏等。
本文适用于WordPress 5.2.2。关于WordPress Gutenberg自定义系列目录如下:
1、WordPress之Gutenberg(古腾堡)自定义块(一)
2、WordPress之Gutenberg(古腾堡)自定义块(二)
3、WordPress之Gutenberg(古腾堡)自定义块扩展栏
4、WordPress之Gutenberg(古腾堡)自定义块工具栏
WordPress Gutenberg(古腾堡)除了可以自定义区块、扩展栏,也可以自定义块工具栏。利用wp.richText.registerFormatType()
可以自定义特有样式用于自定义工具栏,且可以在全部文本编辑块中以工具栏形式呈现。自定义块也可以用wp.editor.BlockControls
显示特有工具栏。
效果截图
本文效果同《WordPress之经典区块自定义按钮》一文,将选中的代码更改为选中的样式。
详细教程
基本步骤如下:
- 在
functions.php
中注册相关的脚本文件
- 编辑工具栏JS文件
- 编辑css外观
自定义块工具栏和自定义块基本步骤一样,但在编辑块中注册并不需要引入css文件,css文件只需要引入主题css用于在文章显示。
注册新格式
找到你主题的 function.php
文件,在最下方添加以下代码:
function.php1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| function my_custom_format_script_register() { wp_register_script( 'my-custom-format-js', get_stylesheet_directory_uri().'/js/my-custom-format.js', array( 'wp-rich-text', 'wp-element', 'wp-editor', 'wp-components' ) ); } add_action( 'init', 'my_custom_format_script_register' ); function my_custom_format_enqueue_assets_editor() { wp_enqueue_script( 'my-custom-format-js' ); } add_action( 'enqueue_block_editor_assets', 'my_custom_format_enqueue_assets_editor' );
function add_prism() { wp_register_style( 'prismCSS', get_stylesheet_directory_uri() . '/css/prism.css' //自定义路径 ); wp_register_script( 'prismJS', get_stylesheet_directory_uri() . '/js/prism.js' //自定义路径 ); wp_enqueue_style('prismCSS'); wp_enqueue_script('prismJS'); } add_action('wp_enqueue_scripts', 'add_prism');
|
wp-rich-text
是注册新样式必须的, wp-element
、 wp-editor
是自定义工具栏必须的,其他的根据需要添加到PHP文件中的 dependencies
数组。
编辑js文件
在你主题的js文件夹添加 my-custom-format.js
(根据自己的位置添加),添加以下代码:
my-custom-format.js1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
| ( function( wp ) { var el = wp.element.createElement; var BlockControls = wp.editor.BlockControls; var DropdownMenu = wp.components.DropdownMenu; var richText = wp.richText; const MyDropdownMenu = function (props) { return el( BlockControls, null, el( 'div', {className: 'components-toolbar'}, el( DropdownMenu, { icon: 'editor-code', label: '选择语言类型', controls: [ { icon: 'editor-code', title: 'js代码', onClick: function() { props.onChange( richText.toggleFormat( props.value, { type: 'core/my-code' } ) ); } }, { icon: 'editor-code', title: 'html代码', onClick: function() { props.onChange( richText.toggleFormat( props.value, {type: 'code', attributes: {class: 'language-markup'}} ) ); } }, { icon: 'editor-code', title: 'css代码', onClick: function() { props.onChange( richText.toggleFormat( props.value, {type: 'code', attributes: {class: 'language-css'}} ) ); } }, ], }) ) ); }
richText.registerFormatType( 'core/my-code', { title: 'code html', tagName: 'code', className: 'language-js', edit: MyDropdownMenu, } ); } )( window.wp );
|
以上是利用注册新样式来添加自定义工具栏,如果不需要注册新样式且只在特定块中显示该工具栏,只需要在所需工具栏中 edit
函数中添加 MyDropdownMenu
这一部分即可。
如果只是需要的只是单个按钮,而不是下拉框,则可以将 MyDropdownMenu
改为以下的 MyCustomButton
。
1 2 3 4 5 6 7 8 9 10 11
| var MyCustomButton = function( props ) { return wp.element.createElement( wp.editor.RichTextToolbarButton, { icon: 'editor-code', title: 'Sample output', onClick: function() { }, } ); }
|
语法解析:
wp.editor.BlockControls
: 工具栏显示元素。
wp.editor.RichTextToolbarButton
: 富文本按钮,基本属性如下。
icon
:图标,同自定义块图标一样
title
:显示的附带文字
label
:鼠标焦点时的提示文字
onClick
:点击调用函数
wp.components.DropdownMenu
: 下拉框组件,其中 controls
为按钮的列表,按钮的属性与 wp.editor.RichTextToolbarButton
相同。
wp.richText.toggleFormat()
: 对选中的内容应用样式,第一个变量为内容,第二个变量为样式对象。已注册样式格式为 { type: '样式名' }
,未注册可以用 {type: '标签名', attributes: {class: '类名'}}
。
wp.richText.registerFormatType()
: 注册新样式,新样式命名规则同自定义块相同。对象的属性如下。
title
:样式显示名
tagName
:标签名
className
:预设类名
edit
:同自定义块edit函数
CSS文件部分
本文主要为实现选中代码高亮,所以同 《WordPress之经典区块自定义按钮》一文的css文件一样,这部分如有问题可以去前文去看看,这里不做详细解释。
WordPress Gutenberg其他相关自定义系列文章:
1、WordPress之Gutenberg(古腾堡)自定义块(一)
2、WordPress之Gutenberg(古腾堡)自定义块(二)
3、WordPress之Gutenberg(古腾堡)自定义块扩展栏