Я пытаюсь отключить панели инструментов для всех основных блоков, чтобы редакторы не форматировали содержимое без необходимости. Это вообще возможно?
Мой текущий подход:
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 );
});
}
});
Могу ли я как-то получить доступ к панелям инструментов в этом цикле? Правильно ли я понимаю, что я должен переопределить методы редактирования и сохранения основных блоков, возможно, с помощью фильтра?
Спасибо, Патрик
Я только что решил проблему, но не так, как предполагалось. По сути, решение для меня состояло в том, чтобы отменить регистрацию необходимых основных блоков, внести изменения в методы редактирования и сохранения, а затем повторно зарегистрировать блоки.
Очень помогла эта статья в блоге Риада Бенгуэллы: https://riad.blog/2017/10/16/тысяча-и-один-путь-расширить-гутенберг-сегодня/
Вот пример на основе блока 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);
});
В принципе, здесь заменяется как метод редактирования, так и метод сохранения, повторно используются только атрибуты блока из основных блоков. Благодаря тому, что для ввода содержимого используются новые элементы, панели инструментов больше не являются проблемой.
Я надеюсь, что это может помочь кому-то, у кого такая же проблема.
Ваше здоровье, Патрик