如何在Gutenberg编辑器中添加自定义的css类到核心块?

时间:2018-07-09 作者:Trevor

我正在尝试向列表块添加一个类(core/list) 在古腾堡。不幸的是,它看起来像是因为某些块(如列表和段落)没有标准的默认类名wp-block-{name} 无法使用blocks.getBlockDefaultClassName 滤器

为了解决这个问题,我使用了blocks.getSaveContent.extraProps 过滤器,它似乎使我能够将一个类添加到所有还没有类的块中。下面的代码是我如何工作的。它正在添加added-class-name 如列表和段落等。

function addBlockClassName( className ) {
  return Object.assign( className, { class: \'added-class-name\' } );
}

wp.hooks.addFilter(
  \'blocks.getSaveContent.extraProps\',
  \'gdt-guten-plugin/add-block-class-name\',
  addBlockClassName
);
我是这样排队的:

function gdt_blocks_class_rename() {
  wp_enqueue_script(
      \'gdt-plugin-blacklist-blocks\',
      get_stylesheet_directory_uri() . \'/dist/guten-addons.js\',
      array( \'wp-blocks\' )
  );
}
add_action( \'enqueue_block_editor_assets\', \'gdt_blocks_class_rename\' );
然而,我想做的是只向列表块添加一个类?这能做到吗?

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

答案中有标记为正确的问题。它将破坏alignment类的功能,实际上并没有添加到类列表中,而是覆盖它。您将只能对整个主题使用一种解决方案。

相反,您可以使用;registerBlockStyle();将样式变体添加到列表块,并设置;isDefault“;为true,它可以使用该类/样式,但仍然可以跳过使用它,或者如果需要,可以添加多个变体。

wp。domReady()确保在应该加载时加载并应用更改

wp.domReady( () => {
  wp.blocks.registerBlockStyle( \'core/list\', {
    name: \'custom-list-style\',
    label: \'Custom list style\',
    isDefault: true
  } );
} );

SO网友:Shibi

这个钩子有第二个和第三个参数,可以使用第二个参数来获取块类型。

https://wordpress.org/gutenberg/handbook/extensibility/extending-blocks/

一种过滤器,适用于在save函数中返回WP元素的所有块。此过滤器用于向save函数的根元素添加额外的道具。例如:为该元素添加类名、id或任何有效的属性。It receives the current props of the save element, the block type and the block attributes as arguments.

function addBlockClassName( props, blockType ) {
    if(blockType.name === \'core/list\') {
        return Object.assign( props, { class: \'wp-block-list\' } );
    }
    return props;
}

wp.hooks.addFilter(
    \'blocks.getSaveContent.extraProps\',
    \'gdt-guten-plugin/add-block-class-name\',
    addBlockClassName
);

结束