Block.json devuelve rutas incorrectas

2 minutos de lectura

avatar de usuario
JuanRose

Creé un complemento de bloque personalizado con @wordpress/create-block (https://developer.wordpress.org/block-editor/reference-guides/packages/packages-create-block/)

Funciona como un complemento, pero cuando lo muevo al tema, el “editorScript” en el archivo block.json devuelve la ruta incorrecta.

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"
}

Ruta devuelta desde 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

Si registro el script dentro de la función register_block_type, funciona bien

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'
    ) );

  • Tengo el mismo problema, ¿sabías cómo configurar la ruta relativa para buscar en tu tema en lugar de complementos?

    – Taishi

    17/09/2021 a las 13:01

  • No. Solo fui con la solución en el último ejemplo.

    – JuanRose

    24 de septiembre de 2021 a las 0:22

  • Creo que la creación de bloques de gutemberg con el descriptor block.json no está destinada a usarse dentro de un tema, pero podría ser un error al mismo tiempo: P ¿Informaste este problema? Su solución está bien, pero no sé si también se ven afectadas otras rutas (¿activos?)

    – Kbyte

    11 oct 2021 a las 23:27


  • Este comportamiento se informó como un error y se corregirá en la versión 6.0 de WordPress. Solicitud de extracción de Github: github.com/WordPress/wordpress-develop/pull/2494

    – Branislav

    22 de mayo a las 19:19

Registrar un tipo de bloque con block.json usos register_block_script_handle debajo del capó para registrar todos los scripts de bloque relevantes. Esa función utiliza plugins_url para generar direcciones URL si el script usa el file:<path> patrón.

Pasar un identificador ya existente (p. ej., mycustomblock-js) funciona porque register_block_script_handle ve que no es file:<path> y solo usa ese identificador (y la URL correspondiente) tal cual.

edavis es correcto y eso plugins_url() se llama al método cuando se enquea el editorScript, editorStyley style caminos.

Aunque puede pasar otros argumentos a register_block_type para declarar lo que necesitas, me gusta la idea de mantener un simple block.json expediente. Para hacer que esto funcione dentro de un tema, utilicé un gancho de filtro para plugins_url para corregir la URL si detecta que la ruta del tema está incluida en la 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 );

¿Ha sido útil esta solución?