我已经创建了一个自定义块插件@wordpress/block-block(https://developer.wordpress.org/block-editor/reference-guides/packages/packages-create-block/)
它作为一个插件工作,但当我把它移到主题中时,block.json文件中的“editorScript”返回错误的路径。
themeDirectory/blocks/mycustomblock/block.json
{
"name": "create-block/mycustomblock",
"title": "Mycustomblock",
"description": "Example block written with ESNext standard and JSX support – build step required.",
"category": "text",
"icon": "smiley",
"supports": {
"html": false
},
"attributes":{
"backgroundColor": {
"type": "string",
"default": "red"
}
},
"editorScript": "file:./build/index.js"
}
字符串
从editorScript返回的路径:
404 | http://localhost:8888/wordpress-test/wp-content/plugins/Users/jonrose/Dropbox/htdocs/wordpress-test/wp-content/themes/mytheme/blocks/mycustomblock/build/index.js?ver=4f45658ee3212a45c5d5367f6fbdfeba
型
如果我在register_block_type函数中注册脚本,它就可以正常工作
wp_register_script( 'mycustomblock-js', get_template_directory_uri() . '/blocks/mycustomblock/build/index.js', array( 'wp-blocks' ));
register_block_type( __DIR__, array(
'editor_script' => 'mycustomblock-js'
) );
型
2条答案
按热度按时间im9ewurl1#
**编辑(2023年9月):**自WordPress 6.0起,
register_block_script_handle
“允许注册包含主题中资产的区块”。Ref:https://core.trac.wordpress.org/changeset/53091
原始答案(从2022年2月):
从
block.json
加载时,块注册使用register_block_script_handle
。如果脚本使用
file:<path>
模式,则该函数使用plugins_url
生成URL。传入一个已经存在的句柄(例如,
mycustomblock-js
)是可行的,因为register_block_script_handle
认为它不是file:<path>
,并且只按原样使用该句柄(和相应的URL)。hwazgwia2#
edavis是正确的,当查询
editorScript
、editorStyle
和style
路径时,会调用plugins_url()
方法。虽然你可以传递其他参数到
register_block_type
来声明你需要什么,但我喜欢只保留一个简单的block.json
文件的想法。为了在主题中实现这一点,我使用了plugins_url
的过滤器钩子来修复URL,如果它检测到URL中包含主题路径的话。字符串