WordPress 5.9 ha introducido una nueva forma de crear sitios web: la Edición Completa del Sitio (Full Site Editing o FSE). Esto ha supuesto un punto de inflexión para los usuarios de WordPress, ya que ha cambiado por completo la forma en que se crean y funcionan los temas de WordPress.

La introducción de FSE también supuso la aparición de una distinción entre los temas que son totalmente compatibles con las nuevas funcionalidades de creación de sitios, también conocidos como Temas de Bloques, y los temas tradicionales basados en PHP, que ahora llamamos Temas Clásicos.

Con el tiempo, muchas funcionalidades creadas para los Temas de Bloques se han ampliado a los Temas Clásicos. Esto ha dado lugar a una tercera categoría de temas, los Temas Híbridos, que siguen estando construidos con la lógica y la estructura de los Temas Clásicos, pero con soporte para varias funcionalidades diseñadas para los Temas de Bloques.

Este artículo explora los Temas Híbridos, sus funcionalidades clave, cómo los desarrolladores pueden mejorarlos y cuándo elegirlos en lugar de los Temas de Bloques.

¡Empecemos!

Una vista previa del tema Twenty Twenty-Two para WordPress
Twenty Twenty-Two es el primer tema de WordPress compatible con la Edición Completa del Sitio

¿Temas Clásicos o Híbridos?

Antes de la introducción de los Temas de Bloques con Twenty Twenty-Two y WordPress 5.9, no existían los Temas Clásicos. El término surgió para distinguirlos de los Temas de Bloques. Los temas clásicos son todos los temas de WordPress que no son compatibles con las funcionalidades de bloques.

Vista previa del tema Twenty Twenty-One Clásico/Híbrido
Una vista previa del tema Híbrido de Twenty Twenty-One

Hoy en día, no es fácil encontrar Temas Clásicos puros porque, desde la versión 5.9, estos temas se han mejorado con muchas funcionalidades creadas para los Temas de Bloques, lo que ha hecho que la experiencia de edición y diseño de las dos categorías de temas sea cada vez más similar con el paso del tiempo.

Dicho esto, la forma de trabajar con los Temas Híbridos sigue siendo diferente a la de los Temas de Bloques.

Funcionalidades básicas de los Temas Híbridos

Con los Temas Híbridos, tu sitio puede aprovechar las capacidades de edición del editor de bloques de WordPress sin dejar de ser compatible con los plugins y funcionalidades tradicionales de WordPress, como widgets, menús y plantillas de página.

El Personalizador de WordPress

Los Temas Híbridos suelen ser compatibles con el Personalizador de WordPress, un entorno de configuración visual que te permite ajustar la apariencia de tu sitio web de WordPress y previsualizar tus cambios en tiempo real.

El tema predeterminado Twenty Twenty-One es un buen ejemplo de tema híbrido que proporciona los ajustes más comunes del Personalizador, como Identidad del Sitio, Colores y Modo Oscuro, Imagen de fondo, Menús, Widgets, Ajustes de la página de inicio, etc.

El Personalizador con el tema Twenty Twenty-One
El Personalizador con el tema Twenty Twenty-One

Los temas pueden registrar controles específicos del Personalizador, por lo que la funcionalidad varía según el tema. La siguiente imagen muestra el Personalizador de Neve, un tema híbrido ligero de ThemeIsle.

Una vista previa del Personalizador del tema Neve de WordPress
Una vista previa del Personalizador del tema Neve de WordPress

Los temas también pueden registrar funcionalidades avanzadas para ofrecer a los usuarios un control granular sobre aspectos específicos del diseño del sitio. Neve, por ejemplo, proporciona un potente constructor para crear encabezados y pies de página del sitio.

Neve tiene un constructor de cabeceras en el Personalizador
Neve tiene un constructor de cabeceras en el Personalizador

Widgets de bloques

Los Temas Híbridos te permiten personalizar las Áreas de Widgets mediante bloques, gracias al editor de widgets basado en bloques. Esta funcionalidad se introdujo por primera vez con WordPress 5.8 y puedes probarla con cualquier tema clásico que utilice widgets.

La pantalla de Widgets en Twenty Twenty-One
La pantalla de Widgets en Twenty Twenty-One

La interfaz del Editor de Widgets es similar a la interfaz del Editor de Entradas. La siguiente imagen muestra un bloque Imagen en el área de widgets Pie de página del tema Twenty Twenty-One.

Captura de pantalla del editor de widgets con el tema Twenty Twenty-One.
El editor de widgets aporta funcionalidades de bloques a los widgets clásicos.

Los widgets clásicos como Categorías, Archivos, Entradas Recientes o Comentarios Recientes siguen siendo compatibles con los Temas Híbridos. El Editor de Widgets complementa los widgets clásicos de WordPress permitiendo a los usuarios crear los suyos propios a través de su interfaz basada en bloques.

Libro de estilo y patrones de bloques

Con los recientes cambios introducidos con WordPress 6.8, los Temas Híbridos compatibles con los estilos del editor pueden utilizar el Libro de Estilo, una interfaz visual que permite a los usuarios previsualizar cualquier bloque que pueda utilizarse en sus sitios web sin tener que utilizar esos bloques en su contenido.

Puedes acceder al Libro de Estilo en Temas Híbridos desde Apariencia > Diseño > Estilos.

La siguiente imagen muestra el Libro de Estilo del tema híbrido Kadence.

El Libro de estilo del tema híbrido Kadence
El Libro de estilo del tema híbrido Kadence

En la misma interfaz, puedes explorar y gestionar Patrones.

Patrones del tema Blocksy
Patrones del tema Blocksy

Para los Temas Híbridos que los admiten, los patrones están disponibles para su uso en el Editor de Entradas, que está activado por defecto en todas las instalaciones de WordPress desde la versión 5.0, a menos que lo hayas desactivado con el plugin Editor Clásico.

La sección Patrones en el insertador de bloques del Editor de entradas con el tema Twenty Twenty-One
La sección Patrones en el insertador de bloques del Editor de entradas con el tema Twenty Twenty-One

Estructura del tema: Visión general de un desarrollador

Los temas Clásicos y de Bloques no solo son diferentes en cuanto a funcionalidad para el usuario final. También son diferentes desde el punto de vista estructural.

Temas Clásicos

Los Temas Clásicos se basan en unos pocos archivos clave, el más importante de todos ellos es el archivo style.css. Este archivo proporciona los metadatos del tema y determina la apariencia del sitio en el front end.

Además de la hoja de estilo del tema, los Temas Clásicos suelen tener un archivo functions.php que se utiliza para crear la funcionalidad y el soporte del tema.

Los Temas Clásicos también se basan en plantillas PHP que definen la estructura de una página y sus áreas principales: encabezado, cuerpo, sidebars y pie de página. Cuando un usuario visita una entrada o página, WordPress determina qué plantilla utilizar para mostrar el contenido en la pantalla según un estricto sistema de reglas conocido como jerarquía de plantillas. Las plantillas más utilizadas son index.php, page.php, single.php, y muchas otras.

Los Temas Clásicos pueden utilizar funciones PHP específicas (hooks de acción y de filtro), que se ejecutan en momentos concretos de la vida de WordPress, lo que permite a los desarrolladores ampliar la funcionalidad de un tema utilizando código PHP en el archivo functions.php de un tema hijo.

Puede que pienses que personalizar un tema clásico es especialmente difícil para los usuarios sin conocimientos de programación.

Temas de Bloques

Los Temas de Bloques también necesitan un style.css para proporcionar a WordPress los metadatos del tema, pero dependen en gran medida de un archivo theme.json, un archivo de configuración que define estilos y ajustes globales para un tema. Contiene un objeto JSON cuyas propiedades definen los ajustes iniciales necesarios para crear el diseño y definir la apariencia de las páginas del sitio.

Los Temas de Bloques también utilizan plantillas y partes de plantillas, pero éstas son estructuralmente diferentes de las plantillas PHP de los temas clásicos. En los Temas de Bloques, las plantillas y las partes de plantillas son archivos HTML que contienen marcas específicas y objetos JSON. Por ejemplo, consideremos la plantilla home.html del tema predeterminado Twenty Twenty-Five:

<!-- wp:template-part {"slug":"header"} /-->

<!-- wp:group {"tagName":"main","style":{"spacing":{"margin":{"top":"var:preset|spacing|60"}}},"layout":{"type":"constrained"}} -->
<main class="wp-block-group" style="margin-top:var(--wp--preset--spacing--60)">
	<!-- wp:pattern {"slug":"twentytwentyfive/hidden-blog-heading"} /-->
	<!-- wp:pattern {"slug":"twentytwentyfive/template-query-loop"} /-->
</main>
<!-- /wp:group -->

<!-- wp:template-part {"slug":"footer"} /-->

Esta plantilla consta de elementos estructurados en forma de etiquetas HTML y comentarios. Los comentarios pueden hacer referencia a otros elementos típicos de un tema de bloques, como partes de plantillas y patrones, que están compuestos por bloques u otros elementos anidados.

Añadir funcionalidades de bloque a los Temas Híbridos

Como hemos mencionado antes, con los Temas Clásicos, necesitas añadir código personalizado para alterar el diseño o la funcionalidad de un sitio, lo que a menudo implica archivos de plantilla o functions.php. En cambio, los Temas de Bloques permiten a los no desarrolladores un mayor control sobre el diseño y la apariencia del sitio.

Los Temas Híbridos ofrecen menos funcionalidades de bloque que los Temas de Bloques, pero aún así pueden proporcionar un mayor control de la disposición y el estilo a través de patrones y estilos globales.

Vamos a explorar algunas potentes funcionalidades de bloques que puedes integrar en tu tema clásico y aprender a implementarlas de forma eficaz.

Estilos globales

WordPress 5.8 introdujo los Estilos Globales, una interfaz visual que permite a los usuarios controlar el aspecto de su sitio web desde una interfaz centralizada, y a los desarrolladores controlar los estilos de sus sitios de WordPress a través de un archivo theme.json.

Para activar esta funcionalidad en tu tema híbrido, sólo tienes que añadir un archivo theme.json a la carpeta raíz del tema. Veamos algunas de las características clave que puedes añadir a tu tema híbrido con theme.json.

Tipografía

Supongamos que quieres añadir compatibilidad con tres familias de fuentes a tu tema clásico. En este ejemplo, utilizaremos Twenty Twenty-One.

Primero, crea una carpeta fonts en assets y sube algunas fuentes de tu elección. Vamos a añadir tres fuentes: Manrope, Fira Code, y Beiruti. Puedes obtener estas fuentes del tema Twenty Twenty-Five.

Tres fuentes y un archivo theme.json añadidos al tema Twenty Twenty-One
Añadimos tres fuentes y un archivo theme.json al tema Twenty Twenty-One

Abre tu editor de texto y crea el siguiente archivo theme.json:

{
	"$schema": "https://schemas.wp.org/trunk/theme.json",
	"version": 3,
	"settings": {
		"layout": {
			"contentSize": "768px",
			"wideSize": "1024px"
		},
		"typography": {
			"fontFamilies": [
				{
					"name": "Manrope",
					"slug": "manrope",
					"fontFamily": "Manrope, sans-serif",
					"fontFace": [
						{
							"src": [
								"file:./assets/fonts/manrope/Manrope-VariableFont_wght.woff2"
							],
							"fontWeight": "200 800",
							"fontStyle": "normal",
							"fontFamily": "Manrope"
						}
					]
				},
				{
					"name": "Fira Code",
					"slug": "fira-code",
					"fontFamily": "\"Fira Code\", monospace",
					"fontFace": [
						{
							"src": [
								"file:./assets/fonts/fira-code/FiraCode-VariableFont_wght.woff2"
							],
							"fontWeight": "300 700",
							"fontStyle": "normal",
							"fontFamily": "\"Fira Code\""
						}
					]
				},
				{
					"name": "Beiruti",
					"slug": "beiruti",
					"fontFamily": "Beiruti, sans-serif",
					"fontFace": [
						{
							"src": [
								"file:./assets/fonts/beiruti/Beiruti-VariableFont_wght.woff2"
							],
							"fontWeight": "300 700",
							"fontStyle": "normal",
							"fontFamily": "Beiruti"
						}
					]
				}
			]
		}
	}
}

La propiedad settings.typography.fontFamilies te permite registrar cualquier número de familias de fuentes personalizadas. Para cada fuente, tendrás que declarar las siguientes propiedades:

  • name: Un título requerido legible por humanos para la familia de fuentes.
  • slug: Un slug requerido para la familia de fuentes. Se añadirá a una propiedad personalizada CSS generada: --wp--preset--font-family--{slug}.
  • fontFamily: Un valor requerido que se asignará al valor CSS font-family.
  • fontFace: Un array opcional de tipos de letra que se asignan a la regla CSS @font-face. Sólo lo necesitas con fuentes web personalizadas.

Guarda tu theme.json y accede a tu panel de control de WordPress. Crea una nueva entrada o página, añade un párrafo con un texto de muestra y abre la barra lateral de bloques. Haz clic en el botón Opciones de tipografía y selecciona Fuente. Deberías encontrar opciones para las familias de fuentes que acabas de añadir a tu tema.

Las siguientes imágenes muestran el aspecto de la barra lateral del bloque Párrafo antes y después de añadir el theme.json mostrado anteriormente.

Barra lateral del bloque Párrafo con el tema Twenty Twenty-One sin theme.json
Barra lateral del bloque Párrafo con el tema Twenty Twenty-One sin theme.json
Barra lateral de bloques de párrafos con el tema Twenty Twenty-One con theme.json
Barra lateral de bloques de párrafos con el tema Twenty Twenty-One con theme.json

Las propiedades de estilo globales varían según el tema. Aparte de typography, las propiedades comúnmente admitidas te permiten controlar la paleta de colores, el diseño y los estilos personalizados. Los siguientes ejemplos se han probado en Twenty Twenty-One.

Paleta de colores, degradados y filtros duotono

Puedes añadir soporte para colores personalizados utilizando la propiedad settings.color a nivel de tema o de bloque individual. Por ejemplo, el siguiente código añade dos colores a la paleta predeterminada:

settings: {
	"color": {
		"palette": [
			{
				"name": "Dark blue",
				"slug": "dark-blue",
				"color": "#1e73be"
			},
			{
				"name": "Bright green",
				"slug": "bright-green",
				"color": "#81d742"
			}
		]
	},
}

Puedes utilizar la propiedad settings.color.palette para registrar tantos colores como desees.

Añade una paleta de colores personalizada a Twenty Twenty-One
Añade una paleta de colores personalizada a Twenty Twenty-One

También puedes añadir soporte para degradados y filtros duotono:

settings: {
	"color": {
		"gradients": [
			{
				"gradient": "linear-gradient(135deg, #0073e6, #8fceff)",
				"name": "Clear Sky",
				"slug": "clear-sky"
			},
			{
				"gradient": "linear-gradient(to right top, #ff8c00, #ff0080)",
				"name": "Vivid Sunset",
				"slug": "vivid-sunset"
			}
		]
	}
}
Añadimos dos degradados a Estilos Globales en Twenty Twenty-One a través de theme.json
Añadimos dos degradados a Estilos Globales en Twenty Twenty-One a través de theme.json
settings: {
	"color": {
		"duotone": [
			{
				"colors": [ "#0A2F51", "#F5D04E" ],
				"name": "Deep Sea Gold",
				"slug": "deep-sea-gold"
			},
			{
				"colors": [ "#3A0CA3", "#FFB703" ],
				"name": "Purple Amber",
				"slug": "purple-amber"
			},
			{
				"colors": [ "#1B4332", "#BAE6C4" ],
				"name": "Forest Mist",
				"slug": "forest-mist"
			},
			{
				 "colors": [ "#000000", "#FFFFFF" ],
				 "name": "Black and White",
				 "slug": "black-and-white"
			}
		]
	}
}
Añadimos filtros duotono a los Estilos Globales en Twenty Twenty-One
Añadimos filtros duotono a los Estilos Globales en Twenty Twenty-One

Diseño

También puedes personalizar la configuración predeterminada del diseño. La propiedad settings.layout te permite establecer el ancho predeterminado del contenido y el ancho de la alineación horizontal. Aquí tienes un ejemplo:

"settings": {
	"layout": {
		"contentSize": "768px",
		"wideSize": "1024px"
	}
}

Para obtener una descripción más detallada de theme.json, consulta nuestro completo tutorial sobre theme.json y la documentación oficial de WordPress.

Variaciones de estilos de bloque

Las variaciones de estilo de bloques, introducidas por primera vez con WordPress 5.3, permiten a los desarrolladores crear estilos alternativos para bloques específicos.

En pocas palabras, los estilos de bloque son clases CSS que se añaden al elemento envolvente de un bloque en la forma .is-style-{name}.

Las variaciones de estilos de bloque aparecen en el panel Estilos de la barra lateral de bloques y te permiten seleccionar un estilo para el bloque con un solo clic.

Variaciones de estilo predeterminadas de Twenty Twenty-One para el bloque Imagen
Variaciones de estilo predeterminadas de Twenty Twenty-One para el bloque Imagen

Puedes registrar tus variaciones de estilos de bloque de varias formas.

En primer lugar, puedes registrar estilos de bloque utilizando la función PHP register_block_style(). Por ejemplo, puedes registrar la siguiente variación de estilo en el archivo functions de tu tema:

if ( function_exists( 'register_custom_block_style' ) ) {
	register_block_style(
		'core/image',
		array(
			'name'	=> 'custom',
			'label'	=> __( 'Custom', 'text-domain' ),
			'inline_style'	=> '.wp-block-image.is-style-custom img { border-radius: 12px; }',
		)
	);
}

add_action( 'init', 'register_custom_block_style' ); 

register_block_style() acepta dos argumentos:

  • $block_name: El nombre de un tipo de bloque o un array de tipos de bloque
  • $style_properties: Un array que contiene las propiedades de estilo. En este ejemplo, hemos utilizado name, label, y inline_style.

El código anterior genera una variación de estilo de bloque con una única propiedad CSS. Una vez añadido este código al archivo functions.php de tu tema o tema hijo, aparece un botón en el panel de estilos de bloque para que el usuario pueda establecer el estilo con un solo clic.

Una variación de estilo personalizada para un bloque Imagen en el editor de entradas
Una variación de estilo personalizada para un bloque Imagen en el editor de entradas

La siguiente imagen muestra la variación de estilos del bloque en el front-end. El tema sigue siendo Twenty Twenty-One.

Una variación de estilos de bloque con Twenty Twenty-One
Una variación de estilos de bloque con Twenty Twenty-One

Puedes añadir tus estilos inline en tu código PHP, como en el ejemplo anterior, pero tu código puede volverse difícil de mantener rápidamente a medida que los estilos se vuelven más complejos y elaborados. En estos casos, puedes registrar la variación de estilo como vimos anteriormente, pero definir los estilos en tu archivo theme.json.

En el siguiente ejemplo, creamos una variación de estilo Azul oscuro para el bloque Título.

Primero, registra la variación de estilo en el archivo de functions del tema:

add_action('init', 'register_block_style_labels');

function register_block_style_labels() {
	$block_types = ['core/heading'];

	if (function_exists('register_block_style')) {
		foreach ($block_types as $block_type) {
			register_block_style(
				$block_type,
				array(
					'name'	=> 'dark-blue-bg',
					'label' => __('Dark Blue', 'twentytwentyone')
				)
			);
		}
	}
}

A continuación, define los estilos de variación en tu archivo theme.json:

"settings": {
	"styles": {
		"blocks": {
			"core/heading": {
				"variations": {
					"dark-blue-bg": {
						"color": {
							"background": "#2860a6",
							"text": "#ffffff"
						},
						"spacing": {
							"padding": {
								"top": "0.3em",
								"right": "0.4em",
								"bottom": "0.3em",
								"left": "0.4em"
							}
						}
					}
				}
			}
		}
	}
}

Ahora, los usuarios de tu tema pueden elegir entre dos variaciones de estilo para el bloque Encabezado, como se muestra en la siguiente imagen.

Una variación de estilo para el bloque Encabezado con el tema Twenty Twenty-One
Una variación de estilo para el bloque Encabezado con el tema Twenty Twenty-One

Variaciones de bloque

Las variaciones de bloque son versiones alternativas de cualquier bloque registrado. Mientras que las variaciones de estilo de bloque (o estilos de bloque) son versiones personalizadas de un estilo de bloque que los usuarios pueden añadir al contenido con un solo clic, las variaciones de bloque son versiones alternativas de la configuración de un bloque. Permiten a los usuarios insertar rápidamente un bloque con ajustes preconfigurados sin tener que establecer las mismas configuraciones para cada instancia de bloque.

La API de Variaciones de Bloque permite a los Temas Híbridos registrar variaciones de bloque mediante JavaScript. En los casos más sencillos, crear un script y ponerlo en cola puede ser suficiente, pero si trabajas mucho con JavaScript y bloques de Gutenberg, es posible que te interese incorporar herramientas de construcción a tu flujo de trabajo. (Lectura recomendada).

Supongamos que quieres crear una variación de bloque con un conjunto de opciones preconfiguradas para que tu variación pueda insertarse rápidamente en tus entradas o páginas con una configuración adicional mínima.

El primer paso es crear un archivo JavaScript vacío y cargarlo en el editor. Tendrás que ponerlo en cola en el archivo functions.php de tu tema utilizando wp_enqueue_script() y el hook de acción enqueue_block_editor_assets.

add_action( 'enqueue_block_editor_assets', function () {
	wp_enqueue_script(
		'my-block-variations',
		get_theme_file_uri( 'assets/js/block-variations.js' ) . '?cache_bust=' . time(),
		array( 
			'wp-blocks', 
			'wp-dom-ready',
			'wp-i18n',
			'wp-edit-post'
		),
		wp_get_theme()->get( 'Version' ),
		true
	);
} );

En el código anterior, utilizamos ?cache_bust=' . time() para añadir una marca de tiempo única a la URL de block-variations.js (por ejemplo, block-variations.js?cache_bust=1698765432). Esto es especialmente útil durante el desarrollo, ya que garantiza que el navegador, el servidor o la CDN carguen siempre la última versión del script, evitando que una versión obsoleta almacenada en caché bloquee la visualización de los cambios.

A continuación, tienes que registrar tu variación de bloque en tu script utilizando la función registerBlockVariation proporcionada por la API de Variaciones de Bloque.

Esta es la firma de la función:

const registerBlockVariation = ( blockName, variation )
  • blockName: El nombre del bloque (es decir, core/query.)
  • variation: Un objeto que describe una variación para el tipo de bloque.

El objeto variation puede incluir cualquiera de los siguientes parámetros:

  • name: (cadena) Un identificador único de la variación.
  • title: (cadena) Un título de la variación legible por humanos.
  • description: (cadena) Una descripción detallada.
  • category: (cadena) Una categoría utilizada en las interfaces de búsqueda.
  • keywords: (Array) Un array de términos que ayudan a los usuarios a descubrir la variación.
  • icon: (WPIcon) Un icono para mostrar en el insertador de bloques.
  • isDefault: (booleano) Si la variación actual es la predeterminada. Por defecto es false.
  • isActive: (Función/Array) Una función o un array de atributos de bloque utilizados para determinar si la variación está activa cuando se selecciona el bloque. Sin isActive, WordPress no sabría distinguir tu variación de un bloque estándar o de otras variaciones, lo que provocaría un comportamiento incoherente en el editor.
  • attributes: (Objeto) Valores de los atributos que anulan los valores predeterminados del bloque.
  • innerBlocks: (Array[]) Configuración inicial del bloque anidado.
  • example: (Objeto) Datos estructurados para la vista previa del bloque. Establécelo como indefinido para desactivar la vista previa.
  • scope: (WPBlockVariationScope[]) La lista de ámbitos en los que es aplicable la variación. Si no se proporciona, asume todos los ámbitos disponibles. Las opciones disponibles son block, inserter, y transform. Por defecto asume block y inserter.

Ahora puedes añadir el JavaScript al archivo block-variations.js:

wp.blocks.registerBlockVariation( 'core/heading', { 
	name: 'custom-centered-text', 
	title: 'Custom Centered Text', 
	description: 'This is a block variation with custom attributes.', 
	attributes: { 
		level: 2,
		textAlign: 'center',
		placeholder: 'Add your text here',
		style: {
			color: {
				text: '#1e73be',
				background: '#81d742'
			}
		}
	},
	isActive: ( blockAttributes ) => {
		return (
			blockAttributes.level === 2 &&
			blockAttributes.textAlign === 'center' &&
			blockAttributes.style?.color?.text === '#1e73be' &&
			blockAttributes.style?.color?.background === '#81d742'
		);
	},
	icon: 'airplane', 
	scope: [ 'inserter' ] 
} );

Este código añade un nuevo tipo de bloque con el icono de un avión al insertador de bloques. Cuando haces clic en el avión, se añade a la página una nueva variación del bloque Encabezado con tu configuración personalizada. Establecemos el nivel del encabezado (H2), centramos el texto, establecemos un marcador de posición y definimos los colores del texto y del fondo del encabezado.

Un ejemplo de variación de bloque con el tema híbrido Twenty Twenty-One
Un ejemplo de variación de bloque con el tema híbrido Twenty Twenty-One

Nota: Para que este código funcione como es debido, asegúrate de que tu tema híbrido es compatible con funciones del editor como 'editor-color-palette', editor-styles, y otras. Para obtener una lista más completa de compatibilidades, consulta la API de Variaciones de Bloque.

Patrones de bloques

Los patrones de bloques son grupos preconstruidos de bloques que puedes añadir a tu contenido y personalizar utilizando la interfaz del editor de bloques.

Los Temas de Bloques suelen proporcionar un número variable de patrones de bloques que puedes añadir a tu contenido directamente desde el insertador de bloques. Los Temas Híbridos pueden añadir compatibilidad con patrones para que los usuarios de temas clásicos puedan beneficiarse de esta potente funcionalidad.

Puedes crear una carpeta patterns en la raíz de tu tema e incluir tus patrones de bloques, o puedes registrarlos en los archivos functions.php u otros .php de tu tema.

Para mantener las cosas en orden, puedes crear un archivo inc/block-patterns.php e incluirlo en el function.php de tu tema con el siguiente código:

require get_template_directory() . '/inc/block-patterns.php';

Una vez hecho esto, puedes crear tu patrón en el editor, copiar el código y registrar tu patrón y categoría de patrón en inc/block-patterns.php utilizando las funciones register_block_pattern_category y register_block_pattern():

if ( function_exists( 'register_block_pattern_category' ) ) {
	function my_hybrid_theme_register_block_pattern_category() {
		register_block_pattern_category(
			'myhybridtheme',
			array( 'label' => esc_html__( 'My Hybrid Theme', 'myhybridtheme' ) )
		);
	}
	add_action( 'init', 'my_hybrid_theme_register_block_pattern_category' );
}

if ( function_exists( 'register_block_pattern' ) ) {
	function my_hybrid_theme_register_block_pattern() {

		// My pattern
		register_block_pattern(
			'myhybridtheme/huge-heading',
			array(
				'title'			=> esc_html__( 'Huge heading', 'myhybridtheme' ),
				'categories'	=> array( 'myhybridtheme' ),
				'viewportWidth'	=> 1440,
				'blockTypes'	=> array( 'core/heading' ),
				'content'		=> '<!-- wp:heading {"textAlign":"center","align":"wide","fontSize":"gigantic","style":{"typography":{"lineHeight":"1.2"}}} --><h2 class="alignwide has-text-align-center has-gigantic-font-size" style="line-height:1.2">' . esc_html__( 'A simple Heading in a pattern', 'myhybridtheme' ) . '</h2><!-- /wp:heading -->',
			)
		);
	}
	add_action( 'init', 'my_hybrid_theme_register_block_pattern' );
}

Puedes previsualizar tu patrón en tu panel de WordPress en Apariencia > Diseño > Patrones > Mi tema híbrido y utilizarlo en tu contenido.

Patrones en Temas Híbridos
Patrones en Temas Híbridos

También puedes duplicar y exportar tu patrón e importarlo a otros sitios web de WordPress.

Añadir un patrón requiere sólo unos clics
Añadir un patrón requiere sólo unos clics

Partes de la plantilla

Aunque los Temas Híbridos utilizan las clásicas plantillas PHP y partes de plantilla, puedes añadir soporte para partes de plantilla en bloque en el archivo functions.php de tu tema:

function my_hybrid_theme_setup() {
	add_theme_support( 'block-template-parts' );
}
add_action( 'after_setup_theme', 'my_hybrid_theme_setup' );

Una vez que hayas añadido soporte para partes de plantilla, puedes incluir cualquier parte de plantilla en cualquier archivo de plantilla de tu tema híbrido utilizando la función block_template_part.

Veamos un ejemplo práctico. Empieza creando una carpeta /parts en la raíz de tu tema y cargando en ella un archivo footer.html. Para este ejemplo, hemos copiado el pie de página del tema Twenty Twenty-Five:

<!-- wp:group {"align":"full","className":"is-style-section-5","style":{"spacing":{"padding":{"top":"var:preset|spacing|60","bottom":"var:preset|spacing|60"}}},"layout":{"type":"constrained"}} -->
<div class="wp-block-group alignfull is-style-section-5" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)">
	<!-- wp:group {"style":{"spacing":{"blockGap":"var:preset|spacing|10"}},"layout":{"type":"flex","orientation":"vertical","justifyContent":"stretch"}} -->
	<div class="wp-block-group">
		<!-- wp:site-title {"level":2,"textAlign":"center","style":{"typography":{"textTransform":"uppercase","fontStyle":"normal","fontWeight":"400"}},"fontSize":"x-large"} /-->
		<!-- wp:navigation {"overlayMenu":"never","style":{"typography":{"textTransform":"uppercase","fontStyle":"normal","fontWeight":"400"},"spacing":{"blockGap":"var:preset|spacing|20"}},"fontSize":"x-large","layout":{"type":"flex","justifyContent":"center"},"ariaLabel":"Social media"} -->
		<!-- wp:navigation-link {"label":"Facebook","url":"#"} /-->
		<!-- wp:navigation-link {"label":"Instagram","url":"#"} /-->
		<!-- wp:navigation-link {"label":"X","url":"#"} /-->
		<!-- /wp:navigation -->
	</div>
	<!-- /wp:group -->
	<!-- wp:spacer {"height":"var:preset|spacing|30"} -->
	<div style="height:var(--wp--preset--spacing--30)" aria-hidden="true" class="wp-block-spacer"></div>
	<!-- /wp:spacer -->
	<!-- wp:paragraph {"align":"center","fontSize":"small"} -->
	<p class="has-text-align-center has-small-font-size">
		Designed with <a href="https://wordpress.org" rel="nofollow">WordPress</a>
	</p>
	<!-- /wp:paragraph -->
</div>
<!-- /wp:group -->

Ahora puedes incluir esta parte de la plantilla en una plantilla clásica con la función block_template_part:

<?php block_template_part( 'footer' ); ?> 

Por ejemplo, puedes incluirla en el archivo footer.php de Twenty Twenty-One. La siguiente imagen muestra el resultado en pantalla.

Parte de una plantilla de bloques incluida en un tema Híbrido
Parte de una plantilla de bloques incluida en un tema Híbrido

También puedes incluir partes de plantilla en una plantilla de bloque utilizando el siguiente código:

<!-- wp:template-part {"slug":"footer"} /-->

Por ejemplo, puedes copiar el código de la plantilla page.html de Twenty Twenty-Five:

<!-- wp:template-part {"slug":"header"} /-->

<!-- wp:group {"tagName":"main","style":{"spacing":{"margin":{"top":"var:preset|spacing|60"}}},"layout":{"type":"constrained"}} -->
<main class="wp-block-group" style="margin-top:var(--wp--preset--spacing--60)">
	<!-- wp:group {"align":"full","style":{"spacing":{"padding":{"top":"var:preset|spacing|60","bottom":"var:preset|spacing|60"}}},"layout":{"type":"constrained"}} -->
	<div class="wp-block-group alignfull" style="padding-top:var(--wp--preset--spacing--60);padding-bottom:var(--wp--preset--spacing--60)">
		<!-- wp:post-featured-image {"style":{"spacing":{"margin":{"bottom":"var:preset|spacing|60"}}}} /-->
		<!-- wp:post-title {"level":1} /-->
		<!-- wp:post-content {"align":"full","layout":{"type":"constrained"}} /-->
	</div>
	<!-- /wp:group -->
</main>
<!-- /wp:group -->

<!-- wp:template-part {"slug":"footer"} /-->

Guarda esta plantilla en tu carpeta /templates y llámala page.html. WordPress la cargará automáticamente según la jerarquía de plantillas. Esta plantilla incluirá automáticamente las partes de las plantillas header.html y footer.html de la carpeta /parts de tu tema híbrido.

Cuándo elegir Temas Híbridos en lugar de Temas de Bloques

Un tema híbrido puede ser la mejor opción en los siguientes casos:

  • Cuando quieras utilizar algunas de las funcionalidades modernas de los Temas de Bloques sin reestructurar completamente un sitio existente.
    Los Temas Híbridos te permiten aprovechar las funcionalidades de los bloques, como el editor de bloques, los estilos globales y los patrones de bloques. Los Temas Híbridos también son compatibles con las APIs del editor de bloques, como la API Block Bindings, la API Interactivity y la API HTML. Esto significa que puedes crear sitios web modernos sin tener que pasar por una migración compleja.
  • Cuando quieras mantener la compatibilidad con plugins o widgets clásicos pero no quieras renunciar a algunas potentes funcionalidades de los Temas de Bloques.
    Las versiones antiguas de algunos plugins pueden tener problemas de compatibilidad con los Temas de Bloques, como las versiones antiguas de Contact Form 7, NextGEN Gallery, Custom Post Type UI y otros plugins. Aunque se recomienda actualizar los plugins a las últimas versiones para evitar vulnerabilidades de seguridad, algunos sitios de WordPress pueden tener instaladas versiones antiguas de un plugin. Si aún no estás preparado para actualizar todos tus plugins, puedes plantearte instalar un tema híbrido.
  • Cuando intentas encontrar el mejor compromiso entre diseño y rendimiento.
    Algunos Temas Híbridos populares están optimizados para la velocidad y pueden proporcionar un rendimiento significativamente mejor que los Temas de Bloques. Sin embargo, son compatibles con el enfoque no-code/low-code (no-código/bajo-código) de los Temas de Bloques, proporcionando una mejor experiencia de diseño que los Temas Clásicos. Los Temas Híbridos optimizados para el rendimiento, como Neve o Kadence, te permiten crear sitios web de aspecto moderno sin comprometer el rendimiento.
  • Cuando quieras una transición suave a FSE.
    A veces, la transición de la antigua a la nueva lógica de diseño puede llevar tiempo, especialmente cuando se trabaja en equipo en sitios grandes, y la curva de aprendizaje es una preocupación. Un tema híbrido permite a tu equipo experimentar con la funcionalidad de los bloques mientras mantiene herramientas de diseño familiares como el Personalizador y las plantillas PHP clásicas.

Sin embargo, también hay escenarios en los que los Temas Híbridos no son la mejor opción. Por ejemplo:

  • Cuando las herramientas de diseño del sitio tienen prioridad sobre el rendimiento general.
    Cuando quieres utilizar algunas funcionalidades específicas de la Edición Completa del Sitio, como el Editor del Sitio, la edición completa de plantillas mediante bloques y la interfaz de Estilos Globales, un tema híbrido no es una opción porque estas funcionalidades no son compatibles o sólo lo son parcialmente en los Temas Híbridos.
  • Con sitios WordPress headless basados en la API REST de WordPress.
    En este caso, son preferibles los Temas de Bloques porque los datos en bloque se exponen fácilmente a través de la API REST (véase, por ejemplo, el endpoint /wp/v2/blocks) o WPGraphQL, mientras que los Temas Híbridos podrían añadir mayor complejidad.
  • Cuando se prefiere un enfoque sin código para la construcción del sitio.
    Los Temas Híbridos no admiten la creación o edición de plantillas a través del editor del sitio. Aunque se puede añadir soporte para partes de plantillas, actualmente este soporte es limitado, y la gestión de plantillas se basa principalmente en PHP.

La conclusión es que no hay una regla rígida y rápida para elegir entre Temas híbridos y de bloques. Depende de muchos factores, como las habilidades disponibles en tu equipo, el tipo de sitio que se está construyendo, los requisitos de rendimiento, la compatibilidad con versiones anteriores y mucho más.

Resumen

La Edición Completa del Sitio y los Temas de Bloques han cambiado radicalmente nuestra forma de crear sitios web de WordPress. La filosofía de bloques da a los usuarios más poder para crear diseños complejos y ajustar cada aspecto de un sitio web.

Pero si aún no estás preparado para dar el salto porque puede que tu sitio no sea totalmente compatible con los Temas de Bloques o porque requiere funcionalidades específicas de un tema clásico, los Temas Híbridos son una opción que te permite tener lo mejor de ambos mundos al permitirte utilizar algunas potentes funcionalidades de los Temas de Bloques manteniendo la compatibilidad con las funcionalidades de los plugins y los Temas Clásicos.

Por no hablar del rendimiento. Los Temas de Bloques pueden consumir muchos recursos debido a la gran cantidad de bloques y al uso de JavaScript. Los Temas Híbridos optimizados para el rendimiento pueden hacer que tu sitio sea más ligero y funcione mejor al reducir la carga de JavaScript necesaria.

Carlo Daniele Kinsta

Carlo es un diseñador y desarrollador de front-end freelance. Cuando escribe artículos y tutoriales, Carlo se ocupa principalmente de los estándares web, pero cuando juega con sitios web, su mejor compañero de trabajo es WordPress.