如本期(https://github.com/WordPress/gutenberg/issues/33374) 我希望自定义块的内部块具有默认的布局和对齐控件,如组块的布局切换,但已烘焙。
回答了,但我想不出代码:
您可以通过向内部块提供布局来实现这一点,也就是说,该功能目前仍处于实验阶段,您应该能够将{experimentalLayout={{{contentSize:\'800px\',wideSize:\'1000px\'}}}传递给您的内部块,您还可以将{experimentalLayout={{inherit:true}}传递给您的内部块,以及继承定义的任何布局。
我的代码
export default function Edit() {
return (
<div {...useBlockProps()}>
<InnerBlocks />
</div>
);
}
这行不通
export default function Edit() {
return (
<div {...useBlockProps()}>
<InnerBlocks __experimentalLayout ={ { inherit: true } } />
</div>
);
}
它是否在块中的支架中。json?
更新了代码,我将其添加到块中。json,它为默认布局添加了切换,但innerblocks仍然没有完全/宽对齐控制。不知道该怎么做,但已经完成了一半。
"supports": {
"__experimentalLayout": {
"contentSize": "800px",
"wideSize": "1000px",
"inherit": true
}
},
根据stokeman的回答更新了代码。json
{
"apiVersion": 2,
"name": "mbp/details",
"version": "0.1.0",
"title": "Details",
"category": "design",
"icon": "heart",
"supports": {
"align": ["full"],
"__experimentalLayout": {
"allowSwitching": false,
"default": {
"inherit": true
}
}
},
"attributes": {
"align": {
"type": "string",
"default": "full"
}
},
"textdomain": "mobilebevpros",
"editorScript": "file:../../../../build/details.js"
}
编辑。js公司
import { __ } from "@wordpress/i18n";
import {
useBlockProps,
useSetting,
InnerBlocks,
} from "@wordpress/block-editor";
export default function Edit() {
const defaultLayout = useSetting("layout") || {};
return (
<div {...useBlockProps()}>
<InnerBlocks __experimentalLayout={defaultLayout} />
</div>
);
}
SO网友:stokesman
你很接近。在块中指定布局详细信息。json应该嵌套在"default"
所有物这样做将相应地显示布局面板,但还有更多内容。
如果需要块的默认布局,则无需添加contentSize
或wideSize
. 下面是我推荐的布局配置(在json块中supports
属性):
"__experimentalLayout": {
"allowSwitching": false,
"default": {
"inherit": true
}
}
这将使块的侧栏/检查器中的布局面板简化为仅显示继承切换(默认情况下启用),而不显示大小输入。
即使是街区。json指定默认情况下布局应继承,需要手动检索默认布局并将其传递给编辑组件中的InnerBlocks:
import {
useBlockProps, // already in use from example
useSetting // new bit
} from \'@wordpress/block-editor\';
export default function Edit() {
const defaultLayout = useSetting( \'layout\' ) || {};
return (
<div {...useBlockProps()}>
<InnerBlocks __experimentalLayout={ defaultLayout } />
</div>
);
}
除此之外,该块必须在服务器上注册,但我认为这已经完成了。
我不确定我是否会寻找替代解决方案,因为API的实验性质意味着它需要一些小心,以免在将来的网站更新中中断。