WordPress 6.8 trae consigo una actualización significativa en la forma en que se registran los bloques. Esto simplifica y optimiza el proceso para los desarrolladores de plugins. Esta nueva versión introduce la función wp_register_block_types_from_metadata_collection(), que permite registrar múltiples tipos de bloques con una sola llamada en lugar de realizar registros individuales para cada uno. Esta innovación se basa en mejoras introducidas en la versión 6.7 y apunta a facilitar el desarrollo y mejorar el rendimiento del sistema
Contexto y Antecedentes
En WordPress 6.7 se presentó la función wp_register_block_metadata_collection(), que permitió a los plugins registrar un archivo “manifest” en PHP. Este archivo concentra todos los metadatos de los bloques, evitando la necesidad de leer y analizar cada archivo block.json de forma individual en cada solicitud. Gracias a esta optimización, se logró una mejora notable en el rendimiento, especialmente para aquellos plugins que registran numerosos bloques.
La Nueva Función: wp_register_block_types_from_metadata_collection()
En WordPress 6.8 se da un paso más al extender esta funcionalidad. Con wp_register_block_types_from_metadata_collection(), ya no es necesario incluir llamadas individuales a register_block_type() para cada bloque. El nuevo método permite que todos los bloques registrados en el archivo manifest se reconozcan automáticamente, eliminando la necesidad de mantener listas manuales en el código PHP del plugin. Este cambio simplifica enormemente la tarea de agregar nuevos bloques: basta con crear el directorio correspondiente y trabajar dentro de él, sin preocuparse por actualizar otros archivos de registro.
Beneficios para los Desarrolladores
Entre las principales ventajas de esta nueva aproximación se destacan:
- Simplificación del Código: Al eliminar la necesidad de registrar manualmente cada bloque, se reduce la cantidad de código PHP y se minimizan los errores asociados.
- Mejora en la Experiencia de Desarrollo: Los desarrolladores pueden centrarse exclusivamente en la creación y perfeccionamiento de sus bloques, sin tener que modificar archivos de registro en el plugin.
- Optimización del Rendimiento: Al utilizar un archivo manifest único para recopilar la información de todos los bloques, se evitan múltiples operaciones de lectura y análisis de archivos JSON, lo que mejora la velocidad de carga.
- Facilidad para la Integración de Nuevos Bloques: Agregar un nuevo bloque es tan sencillo como crear su directorio y el correspondiente archivo block.json, sin tener que actualizar manualmente la lista de bloques registrados.
Ejemplo de Uso
Consideremos un plugin que registra cinco bloques personalizados: “accordion”, “carousel”, “carousel-slide”, “dialog” e “icon-button”. En versiones anteriores, el proceso de registro implicaba iterar sobre una lista de nombres de bloques y llamar a register_block_type() para cada uno, de la siguiente manera:
$block_types = array( 'accordion', 'carousel', 'carousel-slide', 'dialog', 'icon-button' );
foreach ( $block_types as $block_type ) {
register_block_type( __DIR__ . "/build/{$block_type}" );
}
Con WordPress 6.8 y la nueva función, este proceso se simplifica notablemente:
wp_register_block_types_from_metadata_collection( __DIR__ . '/build', __DIR__ . '/build/blocks-manifest.php' );
De esta forma, el registro de todos los bloques se gestiona de manera automática a partir del archivo manifest generado previamente
Compatibilidad con Versiones Anteriores
Dado que wp_register_block_types_from_metadata_collection() es exclusiva de WordPress 6.8, es importante considerar la compatibilidad con versiones anteriores. Se recomienda emplear un código condicional que verifique la existencia de esta función y, en su defecto, utilizar la estrategia previa basada en wp_register_block_metadata_collection() y llamadas individuales a register_block_type(). Un ejemplo de esta estrategia es:
if ( function_exists( 'wp_register_block_types_from_metadata_collection' ) ) {
wp_register_block_types_from_metadata_collection( __DIR__ . '/build', __DIR__ . '/build/blocks-manifest.php' );
} else {
if ( function_exists( 'wp_register_block_metadata_collection' ) ) {
wp_register_block_metadata_collection( __DIR__ . '/build', __DIR__ . '/build/blocks-manifest.php' );
}
$manifest_data = require __DIR__ . '/build/blocks-manifest.php';
foreach ( array_keys( $manifest_data ) as $block_type ) {
register_block_type( __DIR__ . "/build/{$block_type}" );
}
}
Esta aproximación asegura que el plugin sea funcional tanto en WordPress 6.8 como en versiones anteriores, permitiendo una transición suave a las nuevas prácticas de desarrollo.
Generación Automática del Archivo Manifest
Para aprovechar al máximo estas mejoras, es necesario generar y mantener un archivo manifest actualizado. WordPress facilita este proceso a través del comando build-blocks-manifest incluido en el paquete @wordpress/scripts. Este comando se integra en el proceso de compilación del plugin modificando los scripts en el archivo package.json. Por ejemplo:
- Cambiar el script “build” a:
wp-scripts build && wp-scripts build-blocks-manifest - Cambiar el script “start” a:
wp-scripts start && wp-scripts build-blocks-manifest
Una vez generado el archivo manifest, este se utiliza para registrar de manera automática todos los bloques del plugin, simplificando enormemente el flujo de trabajo del desarrollador