skill · sumi-wordpress · v0.6.1
Tema de bloques de WordPress (nativo, sin compilación)
Arquitectura de tema de bloques nativo de WordPress (FSE) sin paso de compilación y sin maquetadores: theme.json v3 como sistema de diseño, plantillas HTML y partes de plantilla, patrones en PHP, functions.php repartido en inc/ por responsabilidad, tipografías autoalojadas, paridad entre editor y frente, versionado y copias de la base de datos para el contenido del Editor del sitio. Úsala al crear o cambiar un tema de WordPress, al editar theme.json, templates/*.html, parts/*.html, patterns/*.php, functions.php o inc/*.php, o cuando el usuario mencione Gutenberg, FSE, tema de bloques o Editor del sitio.
- Referencia
- sumi-wordpress
- skill
- wp-block-theme
- source
- plugins/sumi-wordpress/skills/wp-block-theme/SKILL.md
El enfoque de la casa: un tema de bloques puro. Sin Timber, sin ACF, sin Elementor ni maquetadores, sin cadena de compilación. Gutenberg y theme.json hacen el trabajo pesado; los bloques dinámicos propios (wp-custom-blocks) cubren lo que los bloques del núcleo no alcanzan. El cliente lo edita todo desde el editor de bloques y el Editor del sitio.
Estructura
style.css theme header only (Version drives cache-busting)
theme.json the design system (v3)
functions.php constants + require_once of inc/*, nothing else
inc/
setup.php supports, textdomain, enqueue, editor styles, block styles, pattern category, block registration
performance.php head cleanup, preloads, conditional plugin assets (see wp-performance-audit)
cpt.php post types, taxonomies, meta boxes (see wp-native-features)
settings.php Settings API page for site-wide options
schema.php JSON-LD
icons.php inline SVG icon helper
media.php upload rules (e.g. safe SVG)
templates/ *.html block templates (index, front-page, page, single-<cpt>, archive-<cpt>, taxonomy, 404 + custom)
parts/ header.html, footer.html (thin: reference a pattern)
patterns/ *.php patterns with translatable content
blocks/<name>/ custom dynamic blocks (block.json + render.php [+ index.js])
assets/css/app.css only what theme.json cannot express
assets/js/ small vanilla scripts, deferred
assets/fonts/ self-hosted WOFF2
languages/ .pot/.po/.mo
bin/ token audit scripts (wp-performance-audit)
database/ DB dump + README for content that lives in the DB
functions.php define {THEME}_VERSION (a partir de wp_get_theme()->get('Version')), {THEME}_DIR, {THEME}_URI y hace el require de cada archivo de inc/. Una responsabilidad por archivo; nada de lógica en functions.php.
theme.json es el sistema de diseño
Cada token de DESIGN.md (de sumi-design) se mapea aquí, y el código usa únicamente las propiedades personalizadas generadas.
"version": 3,appearanceTools: true,useRootPaddingAwareAlignments: true,layout.contentSizeywideSize.color.palette: slugs semánticos (base,surface,primary,text-soft,border,offer…); desactiva los valores por defecto (defaultPalette,defaultGradients,defaultDuotone: false) para que en el editor solo se vean los colores de marca.typography.fontFamiliescon entradasfontFaceapuntando aassets/fonts/*.woff2(WordPress genera el@font-face; nunca lo dupliques en el CSS);fontSizesconfluid: {min, max}; desactiva los tamaños por defecto.spacing.spacingSizesnombrados por su valor (4, 8, 12, 16, 24, 32, 48, 64), para que la escala se lea igual en el código y en el editor.custom: todo lo que no tiene un preset del núcleo —radius.{xs…pill}, el ritmo fluido de sección (space.flow*conclamp()), colores de estado, colores de marcas de terceros. Se consume comovar(--wp--custom--radius--lg).styles: estilos globales de elemento (enlaces, encabezados, botones) y estilos de bloque. Prefiere declarar aquí un valor por defecto antes que escribirlo en CSS.templateParts(cabecera y pie, con su área) ycustomTemplates(por ejemplopage-no-title, o una página informativa a ancho completo) declarados de forma explícita.
CSS: solo lo que falta
assets/css/app.css empieza con un comentario que enuncia la regla: únicamente lo que theme.json no puede cubrir, sin tokens duplicados.
- Ayudantes acotados al tema en
:rootcon el prefijo del tema (--{theme}-header-h,--{theme}-container), y tonos derivados concolor-mix()a partir de las variables de la paleta, no valores hexadecimales nuevos. - BEM con el prefijo del tema para los bloques propios:
.{theme}-hero,.{theme}-hero__title,.{theme}-hero--split. - Encólalo en el frente y usa
add_editor_style( 'assets/css/app.css' )para que el editor se vea como el sitio.
Plantillas, partes y patrones
- Las plantillas son delgadas: parte de cabecera → grupo
<main id="main">(composición restringida) → contenido → parte de pie. Dale amainel destino del enlace para saltar al contenido. - Las partes referencian un patrón (
<!-- wp:pattern {"slug":"{theme}/header"} /-->), de modo que el marcado vive en PHP, donde las cadenas son traducibles. - Los patrones llevan el contenido por defecto de los bloques propios: construye el array de atributos con cadenas en
__(),wp_json_encode(..., JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES)y después imprime el comentario de bloque. Campos de la cabecera:Title,Slug,Categories(la categoría del tema),Block TypesyDescription. - Registra una sola categoría de patrones para el tema. Registra variaciones de estilo de bloque para
core/button(y otros del núcleo) en lugar de crear bloques de botón propios.
Contenido que vive en la base de datos
Las páginas, los menús, las opciones y las partes de plantilla personalizadas en el Editor del sitio viven en la base de datos, no en archivos. Mantén database/<site>.sql junto a un README con los comandos de restauración (wp db import …) y con qué contiene. No subas nunca credenciales ni datos de usuario que no necesites; sanea los volcados antes de publicarlos en repos abiertos.
Versionado e internacionalización
- Sube
Versionenstyle.cssen cada despliegue; eso versiona todos los recursos encolados. - El dominio de texto es el slug del tema; todas las cadenas de PHP y del JS del editor pasan por
__()owp.i18n.__; publica el.potjunto a los.po/.mo. El contenido multilingüe va por Polylang (o la herramienta que elija el cliente), nunca escrito a mano.
Comentarios: marca la simplicidad deliberada
Aplica la convención global ponytail: de sumi:code-quality. Costuras típicas de WordPress: un mapa fijo en PHP en vez de una interfaz de meta de término ("ponytail: fixed map of 6 categories, no term-meta UI; extend when the client needs to edit them"), una heurística con has_block() para cargar recursos condicionalmente, o una opción escrita a mano antes de que exista una página de ajustes.
Señales de relleno genérico
- Timber, Twig, ACF o un maquetador añadidos a un tema de bloques nativo.
- Hexadecimales escritos a mano, tamaños de letra en px o espaciados en el CSS o en render.php en lugar de
--wp--preset--*o--wp--custom--*. @font-faceduplicado en el CSS; Google Fonts cargado desde su CDN.- Un functions.php gigantesco; cadenas de marcado escritas a mano en las partes en vez de patrones traducibles.
- La paleta y los tamaños de letra por defecto de WordPress dejados activos junto a los tokens de marca.
Lista de verificación
- Todos los valores visuales vienen de theme.json; las auditorías de
bin/pasan. - El editor y el frente se ven igual (tipografías, colores, espaciado).
- Hay plantillas para cada tipo de contenido en uso, incluidos el 404 y los archivos.
- Las cadenas son traducibles; el
.potestá regenerado. - La versión está subida; el volcado de la base de datos está actualizado si cambió contenido del Editor del sitio.