WordPress 7.0 para developers: bloques, «theme.json» y editor
Esta cuarta entrega es la más densa para quienes hacemos temas. WordPress 7.0 trae una colección de mejoras y correcciones en bloques, theme.json y comportamiento del editor que cambian flujos cotidianos y resuelven bugs arrastrados durante meses. Las repaso ordenadas por impacto real.
Pseudo-elementos en core/button desde theme.json
La mejora técnica más útil para temas: core/button soporta declarativamente :hover, :focus, :focus-visible y :active desde estilos globales. Hasta ahora, para personalizar el estado hover de un botón en un tema tocaba inyectar CSS custom vía wp_enqueue_style() o additional_css en theme.json. Ahora se hace así:
{
"styles": {
"blocks": {
"core/button": {
"color": { "background": "var(--brand)" },
"elements": {
"link": {
":hover": {
"color": { "background": "var(--brand-dark)" }
},
":focus-visible": {
"outline": { "color": "var(--brand)", "width": "2px" }
}
}
}
}
}
}
}
Esto abre la puerta a que otros bloques sigan el mismo camino en próximas versiones. Si mantienes un design system en theme.json, este es el sitio para empezar a centralizar estados del botón.
Layout classnames al wrapper interno
Cambio silencioso que puede romper estilos puntuales: las clases de layout (is-layout-flow, is-layout-constrained, is-layout-flex, etc.) se aplican ahora al contenedor de bloques internos, no a sus hermanos. Si tu tema dependía de targetear esas clases con CSS custom esperando que estuvieran en el padre, comprueba que sigues alcanzando los elementos correctos.
El patrón roto típico:
/* Antes funcionaba; ahora puede no alcanzar */
.wp-block-group.is-layout-flow > .my-custom-class { ... }
Revisa con DevTools el árbol real tras actualizar antes de declarar la migración hecha.
Bloque Tabs: patrón ARIA, duplicación, estilos clásicos
El bloque Tabs acumula varias mejoras de calidad:
- Patrón ARIA Tabs. Renombrado del marcado para seguir el patrón ARIA Authoring Practices —importante el matiz: WCAG son las pautas, ARIA APG es el patrón concreto—. La accesibilidad real con lectores de pantalla mejora sin tocar tu código.
- Duplicación de tabs implementada en el editor, evita el copia y pega manual.
- Estilos para temas clásicos que evitan que los estilos heredados de
core/buttonse filtren en los tabs. Problema que rompía bastantes temas legacy con botones muy estilizados.
Si has hecho workarounds en CSS para estos tres puntos, retíralos tras actualizar.
Bloque Imagen: aspectRatio y scale preservados al cambiar alineación
Al cambiar la alineación a wide o full, los valores de aspectRatio y scale ahora se preservan. Antes se reseteaban, lo que provocaba cambios de layout inesperados al mover una imagen entre alineaciones. Si tienes documentación, guías o vídeos enseñando «no toques la alineación después de ajustar el ratio», quedan obsoletos.
Bloque Búsqueda: dos correcciones que importan
Dos fixes en el bloque Búsqueda que merece la pena anotar:
- La configuración de color se aplica correctamente al
inputcuando el botón está deshabilitado. - Se resuelve el conflicto entre estilos globales definidos vía
theme.jsony los controles locales del inspector para bordes y colores.
Si has tenido reportes de «el borde no se aplica», «el color del placeholder se ignora» o «se sobrescribe lo del Personalizador», probablemente este era el bug.
Bloque Cover con vídeo de fondo
core/cover ahora acepta vídeo como fondo, no solo imagen. Antes había que apilar bloques o usar un plugin de tercero. Patrón importante para landings con hero animado. Si has metido vídeos de fondo con core/video + posicionamiento absoluto + capa de oscurecido manual, retira el apaño.
Bloque Gallery con lightbox y slideshow
Soporte de lightbox con opción de slideshow integrado. El visitante hace clic en una imagen y pasa entre ellas sin salir de la página. Antes esto requería un plugin externo, con sus conflictos de inicialización, dependencias de scripts y problemas de compatibilidad con bloques iframed. Ahora viene de fábrica.
Nuevos bloques: Breadcrumbs, Icons, Headings unificado
Tres entradas al catálogo core:
- Breadcrumbs. Refleja la jerarquía de navegación automáticamente, con filtros developer para personalizar separador y lógica.
- Icons. Catálogo de iconos SVG nativos, sin depender de fuentes de icono externas o plugins.
- Headings unificado. Ya no hay un bloque por cada nivel jerárquico. Es un solo bloque Headings con variaciones y selector rápido en la sidebar para cambiar entre h1-h6. Reduce el ruido del inserter.
Si tu plugin proveía Breadcrumbs o Icons, evalúa si lo retiras y dependes del core o si tu valor añadido justifica mantenerlo.
REST API: campo de fecha en Templates y Template Parts
Los endpoints REST de Templates y Template Parts incluyen ahora un campo de fecha que permite ordenar y filtrar por fecha de creación o modificación. Útil para vistas administrativas custom, auditoría de cambios en estructura del sitio o sincronización con sistemas externos.
Otras correcciones menores que conviene saber
- Estilos globales con pseudo selectores (
:hover,:focus, etc.) en el editor estaban rotos cuando se aplicaban vía Estilos Globales. Arreglado. - Site Identity en panel de Diseño. El bloque aparece directamente en el panel de Diseño del editor de sitio, evitando un salto al Personalizador o a Ajustes Generales.
- Acordeón con controles de dimensión. Acerca el bloque a la paridad con
core/group, aunque sigue sin tener todos los supports.
Resumen accionable
- Migra los estados hover/focus/active de tus botones de CSS custom a
theme.json. - Revisa selectores CSS que dependían de las clases
is-layout-*en el padre. Ajusta a la nueva ubicación en el wrapper interno. - Retira workarounds CSS en Tabs, Búsqueda e Imagen relacionados con los bugs arreglados.
- Evalúa si tus plugins de breadcrumbs o iconos siguen aportando valor frente a los bloques core.
En el último post de la serie cerramos con Notes a nivel de bloque —el sistema editorial que sí ha entrado—, el estado del experimento Content Types, lo que se quedó fuera (RTC, bloque Playlist), y la reflexión sobre qué frentes nos tocan más directamente desde Flowtitude.