将数据名称编辑器插件转换为古登堡插件

时间:2020-01-20 作者:GenesisBits

我有一个旧的自定义插件,我已经使用了3年,现在需要更新以实现古腾堡兼容性。旧插件允许您在编辑器中选择文本并按下按钮,然后将文本包装在自定义标记中。

示例:

Text Name 转换为<a data-name="Text Name">Text Name</a>

我一直在跟踪this 尝试转换它的教程。

这就是我目前拥有的:

( function( wp ) {
    var MyCustomButton = function( props ) {
        return wp.element.createElement(
            wp.blockEditor.RichTextToolbarButton, {
                icon: \'editor-code\',
                title: \'Data Convert\',
                onClick: function() {
                    var content = props.attributes.content;
                    props.onChange( wp.richText.toggleFormat(
                        props.value,
                        { type: \'my-custom-format/sample-output\' }
                    ) );
                },
                isActive: props.isActive,
            }
        );
    }
    wp.richText.registerFormatType(
        \'my-custom-format/sample-output\', {
            title: \'Data Convert\',
            tagName: \'a\',
            className: null,
            edit: MyCustomButton,
        }
    );
} )( window.wp );
我最初试图忽略registerFormatType 而只是尝试在onClick 功能正常但无效。所以我稍微回溯了一下,尝试创建一个自定义格式类型。

因此,关于FormatType,我想了解的是:

tagName: 我想我正确地假设这是一个锚标签。

ClassName: 当前为null,但这需要是数据名而不是类。它还需要将当前突出显示的文本作为数据名称。古腾堡支持这一点吗?一根手指朝着正确的方向就好了!

简而言之,是否可以使用data-name 而不是className 一个与古腾堡兼容的插件?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

查看GitHub repo中的Gutenberg代码,我们可以了解内联图像格式是如何实现的:

https://github.com/WordPress/gutenberg/blob/99f31cdb4ed035264e0332b72dd3a2287d93ff50/packages/format-library/src/image/index.js#L17-L30

export const image = {
    name,
    title: __( \'Image\' ),
    keywords: [ __( \'photo\' ), __( \'media\' ) ],
    object: true,
    tagName: \'img\',
    className: null,
    attributes: {
        className: \'class\',
        style: \'style\',
        url: \'src\',
        alt: \'alt\',
    },
注意属性列表,编辑组件会进行必要的修改。当代码处理更改时,可以通过再次应用格式进行更新,格式应如下所示:

applyFormat( props.value, { type: \'core/image\', attributes: { "data-name": new_value, ...etc } } )
还有其他事情要做,但对于这个问题来说,这些是重要的部分


我还有一些旁注

Accessibility, Disability Laws, and Click Handlers

作为旁注,您的原始代码只处理点击,因此无法使用键盘或辅助技术进行修改。因此,根据各种无障碍、残疾、就业和机会平等法律,您的实施可能在许多国家和州是非法的。可能会有法律后果

Making Sure Your data attribute doesn\'t get stripped out by WP Security

我还要注意,默认的WP白名单可能会删除您的数据标签。这不是古腾堡的一部分,而是PHP,特别是wp_kses_post. 您需要筛选此白名单以说明您的数据属性。

HTML5 Semantic tags

此外,根据这些data-name="..." 属性,您最好使用标准规范中更具语义的属性,例如Aria属性或HTML5标记。如果不知道数据属性的用途,我无法给出任何建议,但如果您可以使用更多的语义标记,它可能会在可访问性、SEO和其他意外领域带来好处。

相关推荐