Desarrollar bloques dinámicos: PHP y React

Contents

Introducción

En el desarrollo de temas y extensiones para WordPress, uno de los avances más significativos en los últimos años ha sido el editor de bloques (Gutenberg). Su arquitectura híbrida, que combina PHP en el servidor y React en el cliente, permite crear bloques estáticos y dinámicos con un alto grado de personalización.

Este artículo está destinado a desarrolladores con conocimientos intermedios o avanzados en PHP y JavaScript, y cubre de manera detallada cómo crear bloques dinámicos: desde la configuración del entorno hasta la publicación de un bloque que se renderice en el servidor usando PHP y ofrezca una experiencia fluida en el editor con React.

Índice

  • Definición y ventajas de los bloques dinámicos
  • Requisitos y configuración del entorno
  • Registro y renderizado en PHP
  • Desarrollo de la interfaz en React
  • Construcción y despliegue
  • Buenas prácticas y optimización
  • Recursos y enlaces de referencia

1. Definición y ventajas de los bloques dinámicos

Bloque estático: se renderiza directamente con el markup definido por React y permanece igual para todos los usuarios.

Bloque dinámico: el HTML que ve el visitante se genera en el servidor (PHP) en cada petición, permitiendo adaptarse a datos cambiantes (entradas de blog, resultados de consultas, campos ACF, etc.).

Ventajas principales

  • Actualización en tiempo real: al generarse en PHP, siempre refleja el estado actual de la base de datos.
  • Optimización SEO: el contenido se entrega ya renderizado al visitante y a los bots de búsqueda.
  • Flexibilidad de datos: se pueden combinar datos de múltiples fuentes (APIs REST, meta campos, transients).

2. Requisitos y configuración del entorno

Servidor y PHP

  • PHP 7.4 (recomendado PHP 8.0 o superior)
  • WordPress 5.0 con Gutenberg activo
  • Extensiones de PHP: curl, mbstring, json

Node.js y herramientas de compilación

  • Node.js 14 y npm o Yarn
  • Webpack o @wordpress/scripts
  • Babel para transpilar código React (JSX)

3. Registro y renderizado en PHP

Para declarar un bloque dinámico en WordPress usaremos register_block_type() con un render_callback. Este callback devuelve el HTML final.


// archivo: src/php/register-blocks.php
add_action(init, function() {
  register_block_type(mi-plugin/mi-bloque-dinamico, array(
    editor_script   => mi-bloque-js,
    render_callback => mi_bloque_render_callback,
    attributes      => array(
      title => array(type=>string, default=>Título dinámico),
      count => array(type=>number, default=>5),
    ),
  ))
})

function mi_bloque_render_callback(attributes) {
  title = esc_html(attributes[title])
  count = intval(attributes[count])
  // Ejemplo: obtener últimas count entradas
  posts = get_posts(array(numberposts=>count))
  ob_start()
  >
  

4. Desarrollo de la interfaz en React

En el editor, crearemos un componente React que permita editar title y count. Utilizamos las APIs de @wordpress/block-editor y React.


// archivo: src/index.js
import { registerBlockType } from @wordpress/blocks
import { InspectorControls, RichText, PanelColorSettings } from @wordpress/block-editor
import { PanelBody, RangeControl, TextControl } from @wordpress/components
import { Fragment } from @wordpress/element

registerBlockType(mi-plugin/mi-bloque-dinamico, {
  title: Mi Bloque Dinámico,
  icon: schedule,
  category: widgets,
  attributes: {
    title: { type: string, source: html, selector: h3 },
    count: { type: number, default: 5 },
  },
  edit: (props) => {
    const { attributes: { title, count }, setAttributes } = props
    return (
      
        
          
             setAttributes({ title: value })}
            />
             setAttributes({ count: value })}
              min={1} max={20}
            />
          
        
        
setAttributes({ title: value })} style={{ marginTop: 0 }} />

Número de posts: {count}

) }, save: () => { // En bloque dinámico, save retorna null return null }, })

5. Construcción y despliegue

  1. Instalar dependencias:
    npm install @wordpress/scripts --save-dev
  2. Configurar package.json:
    
    scripts: {
      build: wp-scripts build,
      start: wp-scripts start
    }
          
  3. Ejecutar npm run build y encolar scripts y estilos en PHP:

// en enqueue.php
wp_register_script(
  mi-bloque-js,
  plugins_url(build/index.js, __FILE__),
  array(wp-blocks, wp-element, wp-editor),
  filemtime(plugin_dir_path(__FILE__).build/index.js)
)
  

6. Buenas prácticas y optimización

  • Caching: utiliza transients o fragmentos de aislamiento para reducir consultas repetitivas.
  • Sanitización: siempre esc_html, esc_url en PHP y atributos validados en React.
  • Accesibilidad: asegúrate de que los controles en InspectorControls tengan etiquetas ARIA.
  • Internacionalización: usa __() y wp.i18n para traducir textos.

7. Recursos y enlaces de referencia

Recurso Enlace
Documentación PHP en WordPress register_block_type()
API de bloques de Gutenberg Developer Resources
Guía oficial de React React Docs
@wordpress/scripts NPM Package

Conclusión

La combinación de PHP y React para bloques dinámicos en WordPress abre un mundo de posibilidades: mantener el contenido siempre actualizado, optimizar la experiencia de usuario y aprovechar capacidades avanzadas del servidor. Con las prácticas y herramientas adecuadas, podrás construir bloques robustos, accesibles y fáciles de mantener.



Acepto donaciones de BAT's mediante el navegador Brave 🙂



Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *