wordpress Block.json返回错误路径

hi3rlvi2  于 2023-11-17  发布在  WordPress
关注(0)|答案(2)|浏览(129)

我已经创建了一个自定义块插件@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'
    ) );

im9ewurl

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)。

hwazgwia

hwazgwia2#

edavis是正确的,当查询editorScripteditorStylestyle路径时,会调用plugins_url()方法。
虽然你可以传递其他参数到register_block_type来声明你需要什么,但我喜欢只保留一个简单的block.json文件的想法。为了在主题中实现这一点,我使用了plugins_url的过滤器钩子来修复URL,如果它检测到URL中包含主题路径的话。

add_filter( 'plugins_url', function ( $url, $path, $plugin ) {
    if ( strpos( $url, get_template_directory() ) !== false ) {
        $url = str_replace( 'wp-content/plugins' . get_home_path(), '', $url );
    }

    return $url;
}, 10, 3 );

字符串

相关问题