我正在尝试禁用所有核心块的工具栏,以防止编辑器不必要地格式化内容。那有可能吗?
我目前的做法是:
wp.blocks.getBlockTypes().forEach((blockType) => {
// unregister all default styles (from the right sidebar)
let blockName = blockType.name;
if ( blockType.hasOwnProperty('styles')) {
blockType.styles.forEach( (style) => {
wp.blocks.unregisterBlockStyle( blockName, style.name );
});
}
});
我可以以某种方式访问此循环中的工具栏吗?我是否正确理解我必须覆盖核心块的编辑和保存方法(可能使用过滤器)?
谢谢Patrik
答案 0 :(得分:0)
我刚刚解决了问题,但与预期不同。 基本上,对我来说,解决方案是注销所需的核心块,更改编辑和保存方法,然后重新注册块。
Riad Benguella的这篇博客文章提供了很大的帮助: https://riad.blog/2017/10/16/one-thousand-and-one-way-to-extend-gutenberg-today/
这是一个基于core / quote块的示例:
const TextControl = wp.components.TextControl;
import './style.scss';
import './editor.scss';
wp.domReady( () => {
let unregisteredBlock = wp.blocks.unregisterBlockType('core/quote');
unregisteredBlock.title = 'Quotation';
unregisteredBlock.icon = 'format-quote';
unregisteredBlock.edit = ({ attributes, setAttributes} ) => {
const updateFirstValue = ( val ) => {
setAttributes({
value: val
});
};
const updateSecondValue = ( val ) => {
setAttributes({
citation: val
});
};
return (
<div>
<TextControl
label='Quote'
value={ attributes.value }
onChange={ updateFirstValue }
/>
<TextControl
label='Citation'
value={ attributes.citation }
onChange={ updateSecondValue }
/>
</div>
);
};
unregisteredBlock.save = ( { attributes, className } ) => {
return (
<blockquote className={className}>
<p>{attributes.value}</p>
<cite>{attributes.citation}</cite>
</blockquote>
)
};
wp.blocks.registerBlockType('core/quote', unregisteredBlock);
});
原则上,这里的edit和save方法都被替换了,只有核心块中的块属性才被重用。由于使用了新元素来输入内容,因此工具栏不再是问题。
我希望这可以帮助遇到相同问题的人。
干杯, 帕特里克