Więc używam zagnieżdżonych bloków w Wordpress Gutenberg. Nakładam opakowanie na moje elementy, które stosują klasę kontenera ładowania początkowego. Oczywiście chciałbym tego tylko na najbardziej zewnętrznych blokach, a nie na tych w zagnieżdżonym bloku.
Czy istnieje sposób na sprawdzenie, czy bieżący blok znajduje się w InnerBlocks
definicji bloku nadrzędnego? Obecnie stosuję opakowanie w blocks.getSaveElement
filtrze.
Czy jest na to lepszy sposób?
Dla kontekstu: W poprzednich wersjach Gutenberga do tego celu służył atrybut układu, ale od tego czasu został usunięty. Używam wersji 3.9.0.
To jest skrócona wersja mojej funkcji opakowania:
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
źródło
źródło
Odpowiedzi:
możesz wywołać
getBlockHierarchyRootClientId
za pomocą clientId bloku,getBlockHierarchyRootClientId
zwróci identyfikator bloku nadrzędnego, jeśli bieżący blok znajduje się w insideBlocks i zwróci ten sam identyfikator, jeśli jest rootemmożesz to tak nazwać
dodatkowo można zdefiniować funkcję pomocniczą, której można użyć w kodzie
źródło
blocks.getSaveElement
nieclientId
zostało jeszcze przypisane żadne, więc wygląda na to, że nie jest możliwe z wnętrza filtra. Być może uda się rozwiązać problem w inny sposób.editor.blockListBlock
aby uruchomić czek wewnątrz bloku i przypisać klasę lub coś