El Full Site Editing (FSE) de WordPress ha evolucionado de una característica experimental a convertirse en el estándar profesional para crear sitios web de alta calidad. Dominar los bloques avanzados y las técnicas de FSE te permite construir experiencias digitales premium sin necesidad de page builders externos, manteniendo rendimiento óptimo y control total sobre cada aspecto del diseño.
Fundamentos del Full Site Editing: Más Allá de lo Básico
El FSE representa un cambio paradigmático en WordPress. Ya no editamos solo el contenido de las páginas, sino la estructura completa del sitio: headers, footers, archivos, páginas 404 y cada plantilla imaginable.
La Anatomía de un Tema Block-Based
Un tema FSE moderno se compone de:
theme.json: El cerebro del tema, donde defines estilos globales, paletas de colores, tipografías y configuraciones de bloques.
Templates: Plantillas HTML que definen la estructura de páginas específicas (home, single post, archive, etc.).
Parts: Fragmentos reutilizables como headers y footers que se insertan en múltiples plantillas.
Patterns: Combinaciones predefinidas de bloques que aceleran la construcción de páginas.
{
"$schema": "https://schemas.wp.org/trunk/theme.json",
"version": 2,
"settings": {
"color": {
"palette": [
{
"slug": "primary",
"color": "#2C3E50",
"name": "Primary"
},
{
"slug": "secondary",
"color": "#E74C3C",
"name": "Secondary"
},
{
"slug": "accent",
"color": "#F39C12",
"name": "Accent"
}
],
"gradients": [
{
"slug": "hero-gradient",
"gradient": "linear-gradient(135deg, #667eea 0%, #764ba2 100%)",
"name": "Hero Gradient"
}
]
},
"typography": {
"fontFamilies": [
{
"fontFamily": "\"Inter\", sans-serif",
"slug": "primary",
"name": "Primary Font"
},
{
"fontFamily": "\"Playfair Display\", serif",
"slug": "heading",
"name": "Heading Font"
}
],
"fontSizes": [
{
"slug": "small",
"size": "0.875rem",
"name": "Small"
},
{
"slug": "medium",
"size": "1rem",
"name": "Medium"
},
{
"slug": "large",
"size": "1.5rem",
"name": "Large"
},
{
"slug": "x-large",
"size": "2.5rem",
"name": "Extra Large"
}
]
},
"spacing": {
"units": ["px", "em", "rem", "vh", "vw", "%"],
"spacingSizes": [
{
"slug": "30",
"size": "clamp(1.5rem, 5vw, 2rem)",
"name": "Small"
},
{
"slug": "40",
"size": "clamp(1.8rem, 1.8rem + ((1vw - 0.48rem) * 2.885), 3rem)",
"name": "Medium"
},
{
"slug": "50",
"size": "clamp(2.5rem, 8vw, 4.5rem)",
"name": "Large"
}
]
},
"layout": {
"contentSize": "750px",
"wideSize": "1200px"
}
},
"styles": {
"color": {
"background": "var(--wp--preset--color--base)",
"text": "var(--wp--preset--color--contrast)"
},
"typography": {
"fontFamily": "var(--wp--preset--font-family--primary)",
"lineHeight": "1.6"
},
"spacing": {
"blockGap": "var(--wp--preset--spacing--40)"
},
"elements": {
"button": {
"color": {
"background": "var(--wp--preset--color--primary)",
"text": "var(--wp--preset--color--base)"
},
"border": {
"radius": "8px"
},
"spacing": {
"padding": {
"top": "1rem",
"right": "2rem",
"bottom": "1rem",
"left": "2rem"
}
},
":hover": {
"color": {
"background": "var(--wp--preset--color--secondary)"
}
}
}
}
}
}
Técnicas Avanzadas con Bloques Nativos
1. Query Loop: El Poder de los Listados Dinámicos
El bloque Query Loop es una revolución para crear listados personalizados de posts sin código PHP.
Caso de uso: Portfolio con filtrado avanzado
Crea un portfolio donde los proyectos se muestren en una cuadrícula con efectos hover profesionales:
<!-- wp:query {"queryId":1,"query":{"perPage":6,"pages":0,"offset":0,"postType":"portfolio","order":"desc","orderBy":"date","author":"","search":"","exclude":[],"sticky":"","inherit":false,"taxQuery":{"category":[4,8]}},"displayLayout":{"type":"flex","columns":3}} -->
<div class="wp-block-query">
<!-- wp:post-template -->
<!-- wp:group {"style":{"spacing":{"padding":{"top":"0","right":"0","bottom":"0","left":"0"}},"border":{"radius":"12px"}},"backgroundColor":"base","className":"portfolio-item"} -->
<div class="wp-block-group portfolio-item has-base-background-color has-background" style="border-radius:12px;padding-top:0;padding-right:0;padding-bottom:0;padding-left:0">
<!-- wp:post-featured-image {"isLink":true,"aspectRatio":"16/9","style":{"border":{"radius":"12px 12px 0 0"}}} /-->
<!-- wp:group {"style":{"spacing":{"padding":{"top":"var:preset|spacing|40","right":"var:preset|spacing|40","bottom":"var:preset|spacing|40","left":"var:preset|spacing|40"}}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group" style="padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)">
<!-- wp:post-title {"level":3,"isLink":true,"style":{"typography":{"fontSize":"1.5rem"}}} /-->
<!-- wp:post-excerpt {"moreText":"Ver proyecto →","excerptLength":15} /-->
<!-- wp:post-terms {"term":"portfolio_category","style":{"spacing":{"margin":{"top":"var:preset|spacing|30"}}}} /-->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->
<!-- /wp:post-template -->
<!-- wp:query-pagination {"layout":{"type":"flex","justifyContent":"center"}} -->
<!-- wp:query-pagination-previous /-->
<!-- wp:query-pagination-numbers /-->
<!-- wp:query-pagination-next /-->
<!-- /wp:query-pagination -->
</div>
<!-- /wp:query -->
Personalización avanzada con CSS personalizado:
.portfolio-item {
transition: all 0.3s ease;
overflow: hidden;
}
.portfolio-item:hover {
transform: translateY(-8px);
box-shadow: 0 20px 40px rgba(0,0,0,0.1);
}
.portfolio-item img {
transition: transform 0.3s ease;
}
.portfolio-item:hover img {
transform: scale(1.05);
}
2. Bloques de Grupo y Cover: Capas de Diseño Sofisticadas
Combina bloques Group y Cover para crear secciones con profundidad visual:
Hero Section Premium:
<!-- wp:cover {"url":"hero-bg.jpg","dimRatio":50,"overlayColor":"primary","minHeight":100,"minHeightUnit":"vh","gradient":"hero-gradient","contentPosition":"center center","isDark":false,"style":{"spacing":{"padding":{"top":"var:preset|spacing|50","right":"var:preset|spacing|50","bottom":"var:preset|spacing|50","left":"var:preset|spacing|50"}}}} -->
<div class="wp-block-cover is-light" style="padding-top:var(--wp--preset--spacing--50);padding-right:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50);padding-left:var(--wp--preset--spacing--50);min-height:100vh">
<span aria-hidden="true" class="wp-block-cover__background has-primary-background-color has-background-dim has-background-gradient has-hero-gradient-gradient-background"></span>
<img class="wp-block-cover__image-background" src="hero-bg.jpg" />
<div class="wp-block-cover__inner-container">
<!-- wp:group {"layout":{"type":"constrained","contentSize":"800px"}} -->
<div class="wp-block-group">
<!-- wp:heading {"textAlign":"center","level":1,"style":{"typography":{"fontSize":"clamp(2.5rem, 6vw, 4.5rem)","fontWeight":"700","lineHeight":"1.1"},"spacing":{"margin":{"bottom":"var:preset|spacing|40"}}}} -->
<h1 class="has-text-align-center" style="margin-bottom:var(--wp--preset--spacing--40);font-size:clamp(2.5rem, 6vw, 4.5rem);font-weight:700;line-height:1.1">
Transformamos Ideas en Experiencias Digitales Premium
</h1>
<!-- /wp:heading -->
<!-- wp:paragraph {"align":"center","style":{"typography":{"fontSize":"1.25rem"},"spacing":{"margin":{"bottom":"var:preset|spacing|50"}}}} -->
<p class="has-text-align-center" style="margin-bottom:var(--wp--preset--spacing--50);font-size:1.25rem">
Diseño web, desarrollo y estrategia digital que impulsan resultados reales para tu negocio
</p>
<!-- /wp:paragraph -->
<!-- wp:buttons {"layout":{"type":"flex","justifyContent":"center"}} -->
<div class="wp-block-buttons">
<!-- wp:button {"style":{"spacing":{"padding":{"top":"1.2rem","right":"2.5rem","bottom":"1.2rem","left":"2.5rem"}},"typography":{"fontSize":"1.1rem"}}} -->
<div class="wp-block-button">
<a class="wp-block-button__link wp-element-button" style="padding-top:1.2rem;padding-right:2.5rem;padding-bottom:1.2rem;padding-left:2.5rem;font-size:1.1rem">
Comenzar Proyecto
</a>
</div>
<!-- /wp:button -->
<!-- wp:button {"className":"is-style-outline"} -->
<div class="wp-block-button is-style-outline">
<a class="wp-block-button__link wp-element-button">Ver Portfolio</a>
</div>
<!-- /wp:button -->
</div>
<!-- /wp:buttons -->
</div>
<!-- /wp:group -->
</div>
</div>
<!-- /wp:cover -->
3. Columns con Diseño Asimétrico
Rompe la monotonía con layouts asimétricos que captan la atención:
<!-- wp:columns {"style":{"spacing":{"blockGap":{"top":"var:preset|spacing|50","left":"var:preset|spacing|50"}}}} -->
<div class="wp-block-columns">
<!-- wp:column {"width":"40%"} -->
<div class="wp-block-column" style="flex-basis:40%">
<!-- wp:image {"sizeSlug":"large","style":{"border":{"radius":"16px"}}} -->
<figure class="wp-block-image size-large" style="border-radius:16px">
<img src="feature-image.jpg" alt=""/>
</figure>
<!-- /wp:image -->
</div>
<!-- /wp:column -->
<!-- wp:column {"width":"60%","verticalAlignment":"center"} -->
<div class="wp-block-column is-vertically-aligned-center" style="flex-basis:60%">
<!-- wp:heading {"level":2} -->
<h2>Soluciones Personalizadas para Cada Desafío</h2>
<!-- /wp:heading -->
<!-- wp:paragraph -->
<p>No utilizamos plantillas genéricas. Cada proyecto es único y merece una solución diseñada específicamente para sus objetivos y audiencia.</p>
<!-- /wp:paragraph -->
<!-- wp:list {"className":"custom-checklist"} -->
<ul class="custom-checklist">
<li>Análisis profundo de necesidades</li>
<li>Diseño centrado en conversión</li>
<li>Desarrollo escalable y mantenible</li>
<li>Soporte continuo post-lanzamiento</li>
</ul>
<!-- /wp:list -->
</div>
<!-- /wp:column -->
</div>
<!-- /wp:columns -->
Bloques Personalizados: Extendiendo las Capacidades
Crear un Bloque de Estadísticas con Animaciones
Aunque FSE es poderoso, a veces necesitas bloques completamente personalizados. Aquí un ejemplo de bloque React para estadísticas animadas:
import { registerBlockType } from '@wordpress/blocks';
import { useBlockProps, InspectorControls } from '@wordpress/block-editor';
import { PanelBody, TextControl } from '@wordpress/components';
import { useEffect, useRef } from '@wordpress/element';
registerBlockType('premium-blocks/animated-stats', {
title: 'Estadísticas Animadas',
icon: 'chart-bar',
category: 'widgets',
attributes: {
number: { type: 'string', default: '1000' },
label: { type: 'string', default: 'Proyectos Completados' },
suffix: { type: 'string', default: '+' },
duration: { type: 'number', default: 2000 }
},
edit: ({ attributes, setAttributes }) => {
const blockProps = useBlockProps();
const { number, label, suffix, duration } = attributes;
const numberRef = useRef(null);
useEffect(() => {
const animateNumber = () => {
const target = parseInt(number);
const increment = target / (duration / 16);
let current = 0;
const timer = setInterval(() => {
current += increment;
if (current >= target) {
numberRef.current.textContent = target;
clearInterval(timer);
} else {
numberRef.current.textContent = Math.floor(current);
}
}, 16);
};
animateNumber();
}, [number, duration]);
return (
<>
<InspectorControls>
<PanelBody title="Configuración">
<TextControl
label="Número"
value={number}
onChange={(val) => setAttributes({ number: val })}
/>
<TextControl
label="Etiqueta"
value={label}
onChange={(val) => setAttributes({ label: val })}
/>
<TextControl
label="Sufijo"
value={suffix}
onChange={(val) => setAttributes({ suffix: val })}
/>
</PanelBody>
</InspectorControls>
<div {...blockProps} className="stat-block">
<div className="stat-number">
<span ref={numberRef}>0</span>
<span className="stat-suffix">{suffix}</span>
</div>
<div className="stat-label">{label}</div>
</div>
</>
);
},
save: ({ attributes }) => {
const blockProps = useBlockProps.save();
const { number, label, suffix } = attributes;
return (
<div {...blockProps} className="stat-block" data-target={number}>
<div className="stat-number">
<span className="stat-value">0</span>
<span className="stat-suffix">{suffix}</span>
</div>
<div className="stat-label">{label}</div>
</div>
);
}
});
CSS para el bloque:
.stat-block {
text-align: center;
padding: 2rem;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
border-radius: 16px;
color: white;
box-shadow: 0 10px 30px rgba(0,0,0,0.2);
}
.stat-number {
font-size: 3.5rem;
font-weight: 700;
line-height: 1;
margin-bottom: 0.5rem;
}
.stat-suffix {
font-size: 2.5rem;
opacity: 0.9;
}
.stat-label {
font-size: 1.1rem;
opacity: 0.95;
text-transform: uppercase;
letter-spacing: 1px;
}
Patterns Reutilizables: Acelera tu Workflow
Los patterns son combinaciones de bloques pre-diseñadas que puedes insertar en cualquier página. Crea una biblioteca de patterns para tu agencia:
Pattern de Testimonios:
<?php
/**
* Title: Testimonial Section
* Slug: premium-theme/testimonial-section
* Categories: featured
*/
?>
<!-- wp:group {"align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|50","bottom":"var:preset|spacing|50"}}},"backgroundColor":"contrast","textColor":"base","layout":{"type":"constrained"}} -->
<div class="wp-block-group alignfull has-base-color has-contrast-background-color has-text-color has-background" style="padding-top:var(--wp--preset--spacing--50);padding-bottom:var(--wp--preset--spacing--50)">
<!-- wp:heading {"textAlign":"center","style":{"spacing":{"margin":{"bottom":"var:preset|spacing|50"}}}} -->
<h2 class="has-text-align-center" style="margin-bottom:var(--wp--preset--spacing--50)">
Lo Que Dicen Nuestros Clientes
</h2>
<!-- /wp:heading -->
<!-- wp:columns {"style":{"spacing":{"blockGap":{"left":"var:preset|spacing|40"}}}} -->
<div class="wp-block-columns">
<!-- wp:column -->
<div class="wp-block-column">
<!-- wp:group {"style":{"spacing":{"padding":{"top":"var:preset|spacing|40","right":"var:preset|spacing|40","bottom":"var:preset|spacing|40","left":"var:preset|spacing|40"}},"border":{"radius":"12px"}},"backgroundColor":"base","textColor":"contrast"} -->
<div class="wp-block-group has-contrast-color has-base-background-color has-text-color has-background" style="border-radius:12px;padding-top:var(--wp--preset--spacing--40);padding-right:var(--wp--preset--spacing--40);padding-bottom:var(--wp--preset--spacing--40);padding-left:var(--wp--preset--spacing--40)">
<!-- wp:paragraph {"style":{"typography":{"fontSize":"1.1rem","lineHeight":"1.8"},"spacing":{"margin":{"bottom":"var:preset|spacing|30"}}}} -->
<p style="margin-bottom:var(--wp--preset--spacing--30);font-size:1.1rem;line-height:1.8">
"El equipo superó todas nuestras expectativas. No solo entregaron un sitio hermoso, sino que realmente entendieron nuestro negocio."
</p>
<!-- /wp:paragraph -->
<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|20"}},"layout":{"type":"flex","flexWrap":"nowrap"}} -->
<div class="wp-block-group">
<!-- wp:image {"width":"50px","height":"50px","sizeSlug":"thumbnail","style":{"border":{"radius":"50%"}}} -->
<figure class="wp-block-image size-thumbnail is-resized" style="border-radius:50%">
<img src="avatar1.jpg" alt="" style="width:50px;height:50px"/>
</figure>
<!-- /wp:image -->
<!-- wp:group {"style":{"spacing":{"blockGap":"0"}},"layout":{"type":"flex","orientation":"vertical"}} -->
<div class="wp-block-group">
<!-- wp:paragraph {"style":{"typography":{"fontWeight":"600"}}} -->
<p style="font-weight:600">María González</p>
<!-- /wp:paragraph -->
<!-- wp:paragraph {"style":{"typography":{"fontSize":"0.9rem"},"elements":{"link":{"color":{"text":"var:preset|color|secondary"}}}},"textColor":"secondary"} -->
<p class="has-secondary-color has-text-color has-link-color" style="font-size:0.9rem">CEO, TechStart</p>
<!-- /wp:paragraph -->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:group -->
</div>
<!-- /wp:column -->
<!-- Repetir para más testimonios -->
</div>
<!-- /wp:columns -->
</div>
<!-- /wp:group -->
Optimización de Rendimiento en FSE
1. Lazy Loading Estratégico
Configura imágenes para carga diferida automática:
{
"settings": {
"blocks": {
"core/image": {
"color": true,
"border": {
"radius": true
}
}
}
}
}
2. Minimiza el Uso de CSS Personalizado
Aprovecha al máximo las utilidades de theme.json antes de agregar CSS custom. Esto reduce significativamente el peso de tu tema.
3. Preload de Fuentes
En tu functions.php:
function premium_theme_preload_fonts() {
?>
<link rel="preload" href="<?php echo get_template_directory_uri(); ?>/assets/fonts/inter-var.woff2" as="font" type="font/woff2" crossorigin>
<link rel="preload" href="<?php echo get_template_directory_uri(); ?>/assets/fonts/playfair-display.woff2" as="font" type="font/woff2" crossorigin>
<?php
}
add_action('wp_head', 'premium_theme_preload_fonts', 1);
Técnicas de Animación con FSE
Agrega animaciones sutiles sin JavaScript pesado usando CSS y atributos de bloques:
/* En tu stylesheet */
.fade-in-up {
opacity: 0;
transform: translateY(30px);
animation: fadeInUp 0.6s ease forwards;
}
@keyframes fadeInUp {
to {
opacity: 1;
transform: translateY(0);
}
}
/* Delays escalonados */
.fade-in-up:nth-child(1) { animation-delay: 0.1s; }
.fade-in-up:nth-child(2) { animation-delay: 0.2s; }
.fade-in-up:nth-child(3) { animation-delay: 0.3s; }
/* Parallax suave con CSS */
.parallax-section {
background-attachment: fixed;
background-position: center;
background-repeat: no-repeat;
background-size: cover;
}
/* Hover effects premium */
.premium-card {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.premium-card:hover {
transform: translateY(-8px) scale(1.02);
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.15);
}
Workflow Profesional con FSE
1. Sistema de Versiones para Templates
Mantén versiones de tus templates en el editor:
/wp-content/themes/tu-tema/
├── templates/
│ ├── home.html
│ ├── single.html
│ ├── archive.html
│ └── page.html
├── parts/
│ ├── header.html
│ ├── footer.html
│ └── sidebar.html
└── patterns/
├── hero-section.php
├── services-grid.php
└── testimonials.php
2. Documentación de Patterns
Crea un archivo README para cada pattern:
# Hero Section Pattern
## Uso
Este pattern se usa para secciones hero en la página de inicio y landing pages.
## Variables disponibles
- Altura: 100vh (personalizable)
- Overlay: 50% (ajustable)
- Posición de contenido: Centro
## Personalización
1. Cambiar imagen de fondo desde el panel de Cover
2. Ajustar el overlay desde las opciones de bloque
3. Modificar textos directamente en el editor
3. Testing Cross-Browser
Siempre prueba en:
- Chrome/Edge (Chromium)
- Firefox
- Safari (macOS e iOS)
- Dispositivos móviles reales
Casos de Estudio: Sitios Premium con FSE
Ejemplo 1: Sitio Corporativo
Características implementadas:
- Header sticky con cambio de opacidad en scroll
- Mega menu con columnas personalizadas
- Secciones de servicios con iconos animados
- Formularios de contacto integrados con bloques nativos
- Blog con diseño magazine usando Query Loop
Resultado: Tiempo de carga < 2 segundos, puntuación Lighthouse > 95
Ejemplo 2: Portfolio Creativo
Características:
- Scroll horizontal para galería de proyectos
- Transiciones de página fluidas
- Lightbox nativo con bloques de imagen
- Filtrado de proyectos sin plugins
- Animaciones on-scroll con Intersection Observer
Resultado: Experiencia visual premium sin sacrificar rendimiento
Herramientas Esenciales para FSE
1. Plugin Recomendados (Mínimo necesario)
- GeneratePress Blocks o Kadence Blocks: Bloques adicionales de calidad
- Advanced Custom Fields (ACF): Para campos personalizados que se integran con bloques
- Spectra: Bloques avanzados con opciones de diseño premium
2. Herramientas de Desarrollo
# Compilación de bloques personalizados
npm install @wordpress/scripts --save-dev
# En tu package.json
{
"scripts": {
"start": "wp-scripts start",
"build": "wp-scripts build"
}
}
3. Testing y Debug
// Habilita debug en wp-config.php
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
define('SCRIPT_DEBUG', true);
// Para debug específico de bloques
define('GUTENBERG_DEVELOPMENT_MODE', true);
Mejores Prácticas y Consejos Pro
1. Nomenclatura Consistente
Usa un sistema de nombres claro para tus bloques, patterns y estilos:
Prefijo de tema: "premium"
Bloques: premium/stat-counter
Patterns: premium-theme/hero-section
CSS Classes: premium-card, premium-button
2. Reutilización Estratégica
Crea bloques reutilizables para elementos que se repiten:
- Call-to-actions
- Formularios de contacto
- Secciones de features
- Footers alternativos
3. Fallbacks y Accesibilidad
Siempre incluye:
- Alt text en imágenes
- Etiquetas ARIA donde sea necesario
- Contraste de colores accesible (WCAG AA mínimo)
- Navegación por teclado funcional
- Skip links para navegación rápida
<!-- Ejemplo de skip link -->
<!-- wp:paragraph {"className":"screen-reader-text"} -->
<p class="screen-reader-text">
<a href="#main-content">Saltar al contenido principal</a>
</p>
<!-- /wp:paragraph -->
Conclusión: El Futuro es Block-Based
El Full Site Editing representa el futuro del desarrollo en WordPress. Dominar FSE y bloques avanzados te permite:
- Crear más rápido: Sin dependencias de page builders pesados
- Mantener mejor: Código limpio y estándares de WordPress
- Escalar eficientemente: Reutilización de patterns y bloques
- Optimizar rendimiento: Sin capas innecesarias de abstracción
- Futuro-proof: Siguiendo la dirección oficial de WordPress
La clave está en combinar los bloques nativos de manera creativa, extenderlos cuando sea necesario con bloques personalizados, y mantener siempre el foco en la experiencia del usuario final y el rendimiento.
Con estas técnicas y herramientas, estás equipado para construir sitios web premium que compitan con cualquier solución de page builder comercial, pero con las ventajas de usar el sistema nativo de WordPress: mejor rendimiento, mayor compatibilidad y un futuro asegurado a medida que WordPress continúa evolucionando hacia una experiencia completamente basada en bloques.
Top comments (0)