您的站点不包括对阻止的支持...在注册数据块之后

时间:2020-01-02 作者:Rob Monhemius

我得到的信息是:

您的站点不支持“mcm/菜单卡部分”块。您可以保持此块不变,将其内容转换为自定义HTML块,或将其完全删除。

保存块并重新加载页面编辑器后会发生这种情况。显然wordpress无法识别已注册的块。

js file

function mcm_register_menu_card_section_block() {
  wp.blocks.registerBlockType( \'mcm/menu-card-section\', {
    title: \'Menu Card Section\',
    description: \'Add a section of your menu.\',
    category: \'mcm-blocks\',
    icon: \'list-view\',
    edit() {
      return wp.element.createElement( \'div\', null, \'Edit function output.\' );
    },
    save() {
      let template = wp.element.createElement( \'div\', null, \'Save function output.\' );

      return template;
    }
  } );
}

window.addEventListener( \'load\', () => {
  mcm_register_menu_card_section_block();
});

plugin.php

add_action( \'init\', \'register\' );
function register() {
wp_register_script(
  \'mcm-editor-menu-card-section\',
  plugins_url() . \'/mcm/blocks/js/menu_card_section.js\'
);

register_block_type(
  \'mcm/menu-card-section\',
  array(
    \'editor_script\' => \'mcm-editor-menu-card-section\',
  )
);
}
对可能发生的事情的一些猜测:

我在js文件中犯了一个错误,js文件没有按时执行

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

js文件未按时执行

当DOMload 事件执行时,块编辑器已解析帖子内容,此时块尚未注册,因此它会告诉您它不存在。

而不是:

window.addEventListener( \'load\', () => {
  mcm_register_menu_card_section_block();
});
尝试:

wp.domReady(mcm_register_menu_card_section_block);
在脚本注册码中,不要忘记包含脚本使用的依赖项:

wp_register_script(
  \'mcm-editor-menu-card-section\',
  plugins_url() . \'/mcm/blocks/js/menu_card_section.js\',
  array(
    \'wp-blocks\',
    \'wp-dom-ready\',
    \'wp-element\',
  )
);
由于脚本由register_block_type() 函数它实际上应该位于正确的开始位置,并直接调用函数:

mcm_register_menu_card_section_block();
没有domReady 也应该有效。如何使用domReady 如果第三方插件需要过滤注册,则为其留下一个机会窗口。是否应该使用它还有待讨论:https://github.com/WordPress/gutenberg/issues/9757

相关推荐