Bloques Gutenberg Renderizados en PHP — Compatible con acf_register_block_type | Field Forge - Campos personalizados, diseñados para la velocidad
Descargar Iniciar sesión

Bloques Gutenberg Renderizados en PHP — Compatible con acf_register_block_type

¿Por qué bloques renderizados en PHP?

Gutenberg (el editor de bloques de WordPress) fue diseñado en torno a bloques renderizados en JavaScript. Escribes una save() función en JS que devuelve el HTML del bloque, y WordPress guarda ese HTML en el contenido de la entrada. Para bloques visuales simples, esto funciona de maravilla.

Pero para bloques dinámicos — “Mostrar las 3 últimas entradas del blog con estilo personalizado,” “Mostrar un miembro del equipo con datos del perfil del usuario actual,” “Renderizar una cuadrícula de productos a partir de una consulta de WooCommerce” — los bloques de JavaScript son problemáticos. Terminas escribiendo llamadas a la REST API, gestionando estados de carga y reconstruyendo la lógica de obtención de datos que WordPress ya sabe hacer en PHP.

Los bloques renderizados en PHP te permiten escribir un callback en PHP que se ejecuta en el momento de renderizar la página, tiene acceso completo a las APIs de datos de WordPress (WP_Query, get_field(), get_post_meta(), etc.), y devuelve el HTML directamente. Más simple, más rápido y más acorde con WordPress.

ACF introdujo acf_register_block_type() hace años y se convirtió en el estándar de facto para los desarrolladores de agencias que construyen bloques personalizados de Gutenberg. Field Forge soporta la misma firma de función, por lo que la migración es trivial.


Cómo registrar un bloque PHP

Ejemplo básico

“`php // functions.php o un plugin personalizado

add_action(‘acf/init’, ‘register_my_blocks’);

function register_my_blocks() { if (function_exists(‘acf_register_block_type’)) { acf_register_block_type([ ‘name’ => ‘feature-card’, ‘title’ => __(‘Tarjeta de Característica’), ‘description’ => __(‘Una tarjeta de característica con icono, título y descripción.’), ‘render_callback’ => ‘render_feature_card_block’, ‘category’ => ‘theme’, ‘icon’ => ‘star-filled’, ‘keywords’ => [‘feature’, ‘card’], ‘supports’ => [ ‘align’ => [‘wide’, ‘full’], ‘anchor’ => true, ‘color’ => true, ], ]); } }

function render_feature_card_block($block) { $icon = get_field(‘icon’); $title = get_field(‘title’); $description = get_field(‘description’); ?>

<?php } ```

Este código es idéntico al código de registro de ACF. Funciona sin cambios después de la migración.

Registro nativo de Field Forge

Si prefieres la API nativa de Field Forge (por limpieza de código o para evitar implicar que ACF sigue siendo necesario), usa fieldforge_register_block_type():

php add_action('init', function() { fieldforge_register_block_type([ 'name' => 'feature-card', 'title' => __('Tarjeta de Característica'), 'render_callback' => 'render_feature_card_block', 'category' => 'theme', ]); });

Ambas funciones hacen lo mismo. Usa la que se ajuste a las convenciones de tu equipo.


Campos personalizados en el bloque

Cada bloque PHP puede tener su propio grupo de campos asignado a través de reglas de ubicación:

Reglas de Ubicación: El bloque es igual a "acf/feature-card"

Cuando un editor añade el bloque a una entrada, Field Forge renderiza el grupo de campos en la barra lateral del bloque (o en línea, dependiendo de la configuración del bloque). El editor completa los campos, el bloque se actualiza automáticamente con una vista previa en vivo.

En el momento de renderizar, la función render_callback utiliza get_field() para acceder a los valores de los campos:

“`php function render_feature_card_block($block) { // get_field() funciona dentro de los callbacks de bloque $icon = get_field(‘icon’); $title = get_field(‘title’);

// El array $block contiene todo sobre esta instancia específica del bloque $block_id = $block[‘id’]; $is_preview = !empty($block[‘is_preview’]); $block_data = $block[‘data’]; $className = !empty($block[‘className’]) ? $block[‘className’] : ”;

// Renderizar HTML ?>

<div class="feature-card “>

<?php } ```


Soportes del bloque

Los bloques PHP soportan todas las características estándar de los bloques de Gutenberg:

Todo configurado a través de la API estándar de soporte de bloques de WordPress.


Modo de vista previa

Cuando un editor está viendo el bloque en el editor (no en el frontend), el callback se ejecuta en “modo de vista previa”:

php function render_my_block($block) { if ($block['is_preview']) { // Renderizando en el editor echo '

'; render_actual_block($block); echo '

'; } else { render_actual_block($block); } }

Usa esto para añadir envolturas solo para el editor, contenido de marcador de posición cuando los campos están vacíos, o estilos de vista previa especiales.


Bloques internos

Los bloques PHP pueden contener otros bloques de Gutenberg a través de InnerBlocks:

“`php acf_register_block_type([ ‘name’ => ‘two-column’, ‘render_callback’ => ‘render_two_column_block’, ‘supports’ => [ ‘inner_blocks’ => true, ], ]);

function render_two_column_block($block) { ?>

<?php } ```

Esto te permite construir bloques de diseño reutilizables que los usuarios pueden llenar con cualquier bloque de Gutenberg básico (párrafo, encabezado, imagen, etc.).


Plantilla de bloque para contenido inicial

Pre-poblar bloques con contenido interno predeterminado:

php acf_register_block_type([ 'name' => 'three-column', 'render_callback' => 'render_three_column_block', 'template' => [ ['core/columns', [], [ ['core/column', [], [['core/heading', ['content' => 'Columna 1']]]], ['core/column', [], [['core/heading', ['content' => 'Columna 2']]]], ['core/column', [], [['core/heading', ['content' => 'Columna 3']]]], ]], ], ]);


Migrando el código de bloques ACF

Cada llamada a acf_register_block_type() en tu tema existente funciona sin cambios cuando Field Forge está activo (a través de la capa de compatibilidad). No se necesitan cambios en el código.

El proceso de migración:

  1. Instalar Field Forge junto a ACF
  2. Ejecutar la importación del grupo de campos + valores
  3. Desactivar ACF
  4. La capa de compatibilidad de ACF de Field Forge toma el control
  5. Tus llamadas a acf_register_block_type() continúan funcionando
  6. Los grupos de campos asignados a bloques a través de reglas de ubicación son migrados

La mayoría de los sitios con bloques PHP personalizados completan la migración sin tocar el código de registro de bloques.


Rendimiento

Los bloques PHP se renderizan en el servidor, por lo que no añaden peso al paquete de JavaScript. Combinado con el almacenamiento de tabla personalizado de Field Forge, las búsquedas de valores de campo dentro de los callbacks de renderizado son rápidas. Una página con 20 bloques personalizados se ejecuta en una fracción del conteo de consultas que necesitaría una configuración similar renderizada en JavaScript.


Comparación con bloques de Gutenberg en JavaScript

Bloques renderizados en PHP Bloques de Gutenberg en JavaScript
Lenguaje PHP JavaScript (React / JSX)
Herramientas de construcción Ninguna Webpack / Vite / wp-scripts
Acceso a datos dinámicos Fácil (get_field(), WP_Query) Requiere llamadas a la REST API
Experiencia del desarrollador Familiar para desarrolladores de PHP Requiere habilidades en JavaScript
Interactividad del lado del cliente No es posible Ciclo de vida completo del componente React
Renderizado del lado del servidor Sí (por defecto) Solo bloques dinámicos
Mejor para Bloques de contenido, consultas dinámicas, campos personalizados Widgets interactivos, edición en vivo

Los bloques PHP y los bloques de JavaScript no son mutuamente excluyentes: usa ambos en el mismo sitio para diferentes propósitos.


¿Listo para construir bloques de Gutenberg con campos personalizados?

Obtén Field Forge — desde $35/año →

El soporte para bloques PHP está incluido en cada plan de pago.

Asistente de IA de Forge En línea

¡Hola! Soy el asistente de IA de Field Forge. Pregúntame lo que quieras sobre el plugin — configuración, funciones, resolución de problemas o desarrollo.

Ahora mismo
Con la tecnología de Forge AI · Explorar documentación