Поэтому я использую вложенные блоки в Wordpress Gutenberg. Я применяю обертку к своим элементам, которые применяют класс контейнера начальной загрузки. Очевидно, я бы хотел, чтобы это было только на внешних блоках, а не на тех, которые находятся внутри вложенного блока.
Есть ли способ узнать, находится ли текущий блок внутри InnerBlocks
Definiton родительского блока? В настоящее время я применяю оболочку внутри blocks.getSaveElement
фильтра.
Есть лучший способ это сделать?
Для контекста: в предыдущих версиях Гутенберга для этого был атрибут макета, но с тех пор он был удален. Я использую версию 3.9.0.
Это сокращенная версия моей функции-обертки:
namespace.saveElement = ( element, blockType, attributes ) => {
const hasBootstrapWrapper = hasBlockSupport( blockType.name, 'bootstrapWrapper' );
if (hasBlockSupport( blockType.name, 'anchor' )) {
element.props.id = attributes.anchor;
}
if (hasBootstrapWrapper) {
// HERE I NEED TO CHECK IF THE CURRENT ELEMENT IS INSIDE A INNERBLOCKS ELEMENT AND THEN APPLY DIFFERENT WRAPPER
var setWrapperInnerClass = wrapperInnerClass;
var setWrapperClass = wrapperClass;
if (attributes.containerSize) {
setWrapperInnerClass = wrapperInnerClass + ' ' + attributes.containerSize;
}
if (attributes.wrapperType) {
setWrapperClass = wrapperClass + ' ' + attributes.wrapperType;
}
const setWrapperAnchor = (attributes.wrapperAnchor) ? attributes.wrapperAnchor : false;
return (
newEl('div', { key: wrapperClass, className: setWrapperClass, id: setWrapperAnchor},
newEl('div', { key: wrapperInnerClass, className: setWrapperInnerClass},
element
)
)
);
} else {
return element;
}
};
wp.hooks.addFilter('blocks.getSaveElement', 'namespace/gutenberg', namespace.saveElement);
filters
block-editor
deadfishli
источник
источник
Ответы:
Вы можете вызвать
getBlockHierarchyRootClientId
с помощью clientId блока,getBlockHierarchyRootClientId
вернет идентификатор родительского блока, если текущий блок находится внутри innerBlocks, и вернет тот же идентификатор, если он кореньВы можете назвать это так
Кроме того, вы можете определить вспомогательную функцию, которую вы можете использовать в своем коде
источник
blocks.getSaveElement
прогонов еще неclientId
было назначено, так что похоже, что это невозможно изнутри фильтра. Возможно, можно найти решение, пытаясь обойти это каким-то другим способом.editor.blockListBlock
для проверки внутри блока и назначить класс или что-то