Gutenberg;用于后端的元数据区域控制的Rich Text/HTML

时间:2019-05-15 作者:jdp

我已经正确注册了一个Gutenberg块,它由一个textarea控件组成,用于存储帖子的元数据。在过去,我只是wp_editoredit-form-advanced 具有完整TinyMCE编辑功能并将textarea html存储在transition_post_status

在Gutenberg环境中,使用TextareaControl组件,如何将完整的编辑功能引入textarea控件?我的基本设置只显示要输入控件的纯文本。我想我可以手工编写html,但似乎我应该能够使用编辑工具栏来实现这一点。

我应该补充一点,我正在寻找完整的TinyMCE编辑,包括有序/无序列表。预格式化工具栏功能不足。

编辑:这是我用来渲染古腾堡块的js。非常基本。

( function( wp ) {
    var el = wp.element.createElement;
    var registerBlockType = wp.blocks.registerBlockType;
    var TextareaControl = wp.components.TextareaControl;
    var RichText = wp.editor.RichText;
    var AlignmentToolbar = wp.editor.AlignmentToolbar;

    registerBlockType( \'my-gutenberg/my-block\', {
        title: \'The title\',
        icon: \'email-alt\',
        category: \'common\',
        keywords: [\'email\'],

        attributes: {
            blockValue: {
                type: \'string\',
                source: \'meta\',
                meta: \'the_meta\'
            }
        },

        edit: function( props ) {
            var className = props.className;
            var setAttributes = props.setAttributes;

            function updateBlockValue( blockValue ) {
                setAttributes({ blockValue });
            }

            return el(
                \'div\',
                { className: className },
                el( TextareaControl, {
                    label: \'The label\',
                    value: props.attributes.blockValue,
                    onChange: updateBlockValue
                } )
            );
        },

        // No information saved to the block
        // Data is saved to post meta via attributes
        save: function() {
            return null;
        }
    } );

} )( window.wp );

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

以下是实现您想要的目标的简单方法:

edit 回调,返回class 扩展了ClassicEdit component 与经典编辑器块一起使用。在你的街区attributes, 确保content 已设置(在问题中blockValue). 经过测试,工作正常:

var el = wp.element.createElement;
var ClassicEdit; // An instance of the private ClassicEdit class.

wp.blocks.registerBlockType( \'my-gutenberg/my-block\', {
    attributes: {
        content: {
            type: \'string\',
            source: \'meta\',
            meta: \'the_meta\'
        }
    },
    edit: function( props ) {
        if ( ! ClassicEdit ) {
            var block = wp.blocks.getBlockType( \'core/freeform\' );
            ClassicEdit = ( class extends block.edit {
                componentDidMount() {
                    // Call the parent method to setup TinyMCE, etc.
                    block.edit.prototype.componentDidMount.call( this );

                    // Change the toolbar\'s title - to your block\'s.
                    jQuery( \'#toolbar-\' + this.props.clientId )
                        .attr( \'data-placeholder\', \'My Title\' );
                }
            } );
        }
        return el( ClassicEdit, props );
    },
    save: function( props ) {
    },
    ...
} );
但你会想copy these CSS 并确保更换my-guternberg/my-block 具有正确的块名称。

对于高级编码,您可以复制the component file, 任意编辑它,并将其用于块的edit 选项(&M);edit: MyClassicEdit.

here\'s the code 我曾经做过测试。

预览

enter image description here