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'
) );
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
, editorStyle
y 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 );
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