WordPress Gutenberg:此块包含意外或无效的内容

Imt*_*mim 5 wordpress wordpress-gutenberg gutenberg-blocks

我正在创建非常简单的文本块。当我第一次添加时,该块工作正常。如果刷新页面并尝试编辑该块,则会显示消息“此块包含意外内容或无效内容”。我试图禁用htmlvalidation检查,但这无济于事。另外,在我单击“确定”之后:当前块和转换块之后包含相同的代码。

http://prntscr.com/lwv18b
http://prntscr.com/lwv1e1

这是我的index.js文件代码

<pre>
/**
 * Block dependencies
 */
import icon from './icon';
import './style.css';

/**
 * Internal block libraries
 */
const { __ } = wp.i18n;
const { registerBlockType } = wp.blocks;
const { RichText } = wp.editor;




/**
 * Register block
 */
export default registerBlockType(
    'jsforwpblocks/richtext',
    {
        title: __('Bizbike Small Description', 'jsforwpblocks'),
        description: __('Default title', 'jsforwpblocks'),
        category: 'common',
        icon: 'text',
        keywords: [
            __('Text', 'jsforwpblocks'),
            __('Call to Action', 'jsforwpblocks'),
            __('Message', 'jsforwpblocks'),
        ],
        attributes: {
            message: {
                type: 'array',
                source: 'children',
                selector: '.message-body',
            }
        },
        supports: {
            // html: false,
            className: false,
            customClassName: false,
            html: false,
            htmlValidation: false,
        },
        edit: props => {
            const { attributes: { message }, className, setAttributes } = props;
            const onChangeMessage = message => { setAttributes({ message }) };
            return (
                <div id="small-text" className={className}>
                    <RichText
                        tagName="div"
                        multiline="p"
                        placeholder={__('Place the title', 'jsforwpblocks')}
                        onChange={onChangeMessage}
                        value={message}
                    />
                </div>
            );
        },
        save: props => {
            const { attributes: { message } } = props;
            return (
                <div>
                    <div class="commute text-center">
                        {message}
                    </div>
                </div>
            );
        },
    },
);

</pre>
Run Code Online (Sandbox Code Playgroud)

Nat*_*hur 5

要诊断这些错误,请打开浏览器控制台(Mac 上 Chrome 中的cmd+ opt+ i,然后选择控制台选项卡)并查找“阻止验证”错误,它应该如下所示:

blocks.js?ver=6.2.5:8545 块验证:块验证失败 avorg/block-rss

({名称:“avorg/block-rss”,标题:“RSS 链接”,图标:{...},类别:“小部件”,属性:{...},...})。

save函数生成的内容:

<div class="wp-block-avorg-block-rss"><a href="http://google.com" target="_blank"><svg aria-hidden="true" role="img" focusable="false" class="dashicon dashicons-rss" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M14.92 18H18C18 9.32 10.82 2.25 2 2.25v3.02c7.12 0 12.92 5.71 12.92 12.73zm-5.44 0h3.08C12.56 12.27 7.82 7.6 2 7.6v3.02c2 0 3.87.77 5.29 2.16C8.7 14.17 9.48 16.03 9.48 18zm-5.35-.02c1.17 0 2.13-.93 2.13-2.09 0-1.15-.96-2.09-2.13-2.09-1.18 0-2.13.94-2.13 2.09 0 1.16.95 2.09 2.13 2.09z"></path></svg></a></div>

从帖子正文中检索到的内容:

<div class="wp-block-avorg-block-rss"><a href="http://google.com" target="_blank" rel="noopener noreferrer"><svg aria-hidden="true" role="img" focusable="false" class="dashicon dashicons-rss" xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20"><path d="M14.92 18H18C18 9.32 10.82 2.25 2 2.25v3.02c7.12 0 12.92 5.71 12.92 12.73zm-5.44 0h3.08C12.56 12.27 7.82 7.6 2 7.6v3.02c2 0 3.87.77 5.29 2.16C8.7 14.17 9.48 16.03 9.48 18zm-5.35-.02c1.17 0 2.13-.93 2.13-2.09 0-1.15-.96-2.09-2.13-2.09-1.18 0-2.13.94-2.13 2.09 0 1.16.95 2.09 2.13 2.09z"></path></svg></a></div>

出现错误是因为检索到的 HTML 与save函数生成的 HTML不匹配。这可能是由于 WordPress 注入一个属性(rel在上面的屏幕截图中)或在使用块后块的定义发生变化时引起的。

要解决此问题,您可能需要执行以下操作之一:

  1. Resolve在编辑器界面中单击以更新块实例以匹配块的修改定义。
  2. 如果您构建了该块,您可能需要编辑该save函数,使其返回的 HTML 与最终保存到数据库中的 HTML 相同。

就我而言,我必须确保我的save函数包含rel="noopener noreferrer"在生成的<a>标记中,以便 WordPress 注入此属性不会导致块实例的 HTML 与我的save函数生成的 HTML 之间不匹配。


Ash*_*ron 2

您收到错误是因为编辑功能的 HTML 节点与保存功能的 HTML 节点不匹配。

在编辑功能上你有 -

<div id="small-text" className={className}>
  <div>
    <p></p>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

保存功能上,您有一个额外的div -

<div>
  <div class="commute text-center">
    <div>
      <p></p>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

  • 编辑应该返回编辑显示,事实上我可以在那里添加元素,没关系,仍然可以编辑。我认为您需要在控制台中查看“预期”和“实际”之前和之后相同的行,内部还有另一个属性没有设置正确。 (2认同)