Entonces estoy usando bloques anidados en Wordpress Gutenberg. Estoy aplicando un contenedor en mis elementos que aplican una clase de contenedor de arranque. Obviamente, solo quiero eso en los bloques más externos, no en los que están dentro de un bloque anidado.
¿Hay alguna manera de saber si el bloque actual está dentro de una InnerBlocks
definición de un bloque padre? Actualmente estoy aplicando el contenedor dentro del blocks.getSaveElement
filtro.
¿Hay una mejor manera de hacer esto?
Para el contexto: en versiones anteriores de Gutenberg solía haber un atributo de diseño para lograr eso, pero desde entonces se ha eliminado. Estoy usando la versión 3.9.0.
Esta es una versión abreviada de mi función de contenedor:
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
fuente
fuente
Respuestas:
puede llamar
getBlockHierarchyRootClientId
con el ID de cliente del bloque,getBlockHierarchyRootClientId
devolverá el ID del bloque principal si el bloque actual está dentro de innerBlocks y devolverá el mismo ID si es rootpuedes llamarlo asi
Además, puede definir una función auxiliar que puede usar en su código
fuente
blocks.getSaveElement
ejecución noclientId
se ha asignado todavía, por lo que parece que no es posible desde el interior del filtro. Tal vez se pueda lograr una solución intentando solucionarlo de alguna otra manera.editor.blockListBlock
para hacer un chequeo dentro del bloque y asignar una clase o algo