Gutenberg se ha convertido en un editor potente y altamente personalizable. Más allá de sus sólidas funcionalidades listas para usar, los desarrolladores de WordPress ahora pueden aprovechar un amplio conjunto de APIs para integrar fácilmente funcionales personalizadas en sus sitios web. Esta extensibilidad permite un notable grado de desarrollo a medida, lo que permite a los desarrolladores crear experiencias online altamente personalizadas y ricas en funcionalidades.

Este artículo explora dos funcionalidades menos conocidas pero muy potentes del desarrollo de WordPress: Variaciones de Estilo (también conocidas como estilos de bloque) y Variaciones de Bloque.

Aunque su utilidad pueda parecer poco clara al principio, te sorprenderá lo útiles que son y cómo una pequeña inversión de tiempo te permitirá integrarlos perfectamente en tu flujo de trabajo.

Obtendrás una comprensión práctica de lo que son y cómo utilizarlos a través de un proyecto real. Puedes implementar este proyecto en tu sitio de WordPress simplemente copiando y pegando el código de este tutorial y, finalmente, añadiendo personalizaciones.

Antes de sumergirnos en el proyecto, revisemos rápidamente los requisitos previos:

  • Entorno local de desarrollo de WordPress: Aunque cualquiera es válido, recomendamos encarecidamente DevKinsta, la suite de desarrollo local de Kinsta. Es fácil de usar y ofrece muchos ajustes y herramientas para lanzar y gestionar rápidamente un sitio local de WordPress.
  • Node.js y npm: Son esenciales, ya que el editor de bloques está basado en React y requiere un proceso de
  • construcción
  • Conocimientos básicos de desarrollo frontend: Será beneficioso tener conocimientos básicos de Node.js, JavaScript (con React), PHP y CSS.

Aunque este proyecto no es demasiado complejo, prepárate para escribir algo de código. El código completo también está disponible en GitHub.

¡Empecemos!

Estilos de bloque Vs. Variaciones de bloque

Los Estilos de bloque y las Variaciones de bloque son dos potentes funcionalidades de WordPress para desarrolladores. Aunque sus nombres suenan bastante parecidos, difieren en su finalidad y uso.

Los Estilos de bloque, también conocidos como variaciones de estilo, son conjuntos preconfigurados de estilos CSS que te permiten cambiar el aspecto de un bloque con un solo clic. Tras registrar un estilo de bloque, aparece un botón en la barra lateral del bloque para asignar un conjunto de estilos preconstruidos al bloque. Puedes activar y desactivar los estilos y previsualizar el bloque en el editor en tiempo real.

Una captura de pantalla del editor de entradas de WordPress que muestra una imagen y la barra lateral de bloques.
El bloque principal Imagen tiene dos variaciones de estilo predeterminadas.

Las variaciones de estilo no alteran los atributos del bloque. Sólo modifican la apariencia de un bloque asignando una clase CSS al elemento envolvente del bloque.

Las variaciones de bloque son una herramienta más potente porque te permiten crear una versión preconfigurada de un bloque con atributos y bloques interiores. También aparecen en el insertador de bloques del editor. Esencialmente, una variación de bloque aparece ante el usuario como si fuera un bloque independiente, completamente independiente del bloque sobre el que se construye.

Las variaciones de bloque permiten personalizar el aspecto, la configuración inicial y la estructura de un bloque.

Con todo esto en mente, ¡utilicemos estas herramientas para llevar los bloques Gutenberg al siguiente nivel!

Un efecto Polaroid animado en un bloque principal de Imagen

Ahora, ¡vamos a sumergirnos en nuestro proyecto! Vamos a ampliar el bloque principal Imagen con un plugin de Gutenberg para:

  • Implementar una Variación del Estilo Polaroid: Los usuarios pueden aplicar un bonito efecto Polaroid a sus imágenes con un solo clic desde la barra lateral de configuración del bloque.
  • Añadir una Animación Hover: Mejoraremos las imágenes de estilo Polaroid con una sutil animación hover.
  • Crea una Variación del Bloque «Polaroid Animada»: Esto permitirá a los usuarios insertar rápidamente imágenes Polaroid preconfiguradas con un efecto hover directamente desde el insertador de bloques.

¿Estás preparado? ¡Vamos a configurar nuestro plugin!

Un efecto de animación en un bloque de Imagen
Un efecto de animación en un bloque de Imagen

Configuración del entorno

Antes de empezar, necesitamos configurar un entorno de desarrollo de WordPress con Node.js. Suponemos que ya has instalado tu entorno de desarrollo local de WordPress y las últimas versiones de Node.js y npm. Si necesitas ayuda, consulta nuestro tutorial sobre cómo crear un plugin Gutenberg para añadir funcionalidad al editor de bloques.

Paso 1 – Crear la estructura básica del plugin

Para este tutorial, llamaremos a nuestro plugin Image Hacker.

Navega a tu directorio plugins y crea una nueva carpeta image-hacker. Dentro de esta carpeta, crea un nuevo archivo image-hacker.php (el archivo principal de tu plugin) y una subcarpeta src, donde crearás las funcionalidades del plugin.

Esta es la estructura básica de tu plugin:

/wp-content/plugins/
└── /image-hacker/
	├── image-hacker.php
	└── /src/

Paso 2 – Crear el código PHP

A continuación, debes asegurarte de que WordPress reconoce tu plugin. Para ello, añade el siguiente código a image-hacker.php:

<?php
/**
 * Plugin Name: Image Hacker
 * Description: Adds new features to the core Image block
 * Version:     1.0.0
 * Author:      Your Name
 * License:     GPL-2.0-or-later
 * License URI: https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain: image-hacker
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit; // Exit if accessed directly.
}

Paso 3 – Inicializar npm e instalar dependencias

Abre tu herramienta de línea de comandos favorita y navega hasta el directorio de tu plugin. Una vez allí, ejecuta el siguiente comando:

npm init -y

Este comando inicializa un nuevo archivo package.json, que incluye las dependencias y scripts de tu proyecto.

A continuación, tienes que instalar los scripts de WordPress y herramientas de construcción como webpack y Babel:

npm install @wordpress/plugins @wordpress/scripts --save-dev

Este comando añade una carpeta node_modules con dependencias de nodos y un archivo package-lock.json. La siguiente imagen muestra la estructura actual de tu proyecto en Visual Studio Code:

Captura de pantalla de un plugin de Gutenberg en Visual Studio Code
Un plugin de Gutenberg en Visual Studio Code

A continuación, abre tu package.json y actualiza la propiedad scripts como se indica a continuación:

{
	"name": "image-hacker",
	"version": "1.0.0",
	"main": "index.js",
	"scripts": {
		"build": "wp-scripts build",
		"start": "wp-scripts start"
	},
	"keywords": [],
	"author": "",
	"license": "ISC",
	"description": "",
	"devDependencies": {
		"@wordpress/plugins": "^7.25.0",
		"@wordpress/scripts": "^30.18.0"
	}
}

Ten en cuenta que las versiones de devDependencies pueden diferir de las anteriores y dependen de las versiones reales instaladas en tu entorno.

Paso 4 – Crea los archivos fuente de tu plugin

El siguiente paso es crear los archivos fuente del plugin. Navega hasta la carpeta src y añade los siguientes archivos:

  • index.js
  • style.scss
  • editor.scss

La estructura del plugin debería tener ahora este aspecto:

/wp-content/plugins/
└── /image-hacker/
	├── /node-modules/
	├── image-hacker.php
	├── package.json
	├── package-lock.json
	└── /src/
		├── index.js
		├── style.scss
		└── editor.scss

Ahora abre tu panel de administración de WordPress y navega hasta la pantalla de Plugins. Busca el plugin Image Hacker y actívalo.

Paso 5 – Incluir activos en el archivo de tu plugin

A continuación, tienes que incluir los activos del plugin en el archivo principal del plugin. Añade lo siguiente a image-hacker.php:

/**
 * Enqueue block editor assets.
 */
function image_hacker_enqueue_editor_assets() {
	$asset_file = include( plugin_dir_path( __FILE__ ) . 'build/index.asset.php');

	// Enqueue the script with our modifications
	wp_enqueue_script(
		'image-hacker-script',
		plugins_url( 'build/index.js', __FILE__ ),
		array( 'wp-plugins', 'wp-edit-post' ),
		filemtime( plugin_dir_path( __FILE__ ) . 'build/index.js' )
	);

	// Enqueue the editor-only styles
	wp_enqueue_style(
		'image-hacker-editor-style',
		plugins_url( 'build/editor.css', __FILE__ ),
		[],
		filemtime( plugin_dir_path( __FILE__ ) . 'build/editor.css' )
	);
}
add_action( 'enqueue_block_editor_assets', 'image_hacker_enqueue_editor_assets' );

/**
 * Enqueue frontend and editor assets.
 */
function image_hacker_enqueue_assets() {
	$asset_file = include( plugin_dir_path( __FILE__ ) . 'build/index.asset.php');

	// Enqueue styles for both frontend and editor
	wp_enqueue_style(
		'image-hacker-style',
		plugins_url( 'build/style-index.css', __FILE__ ),
		[],
		filemtime( plugin_dir_path( __FILE__ ) . 'build/style-index.css' )
	);
}
add_action( 'enqueue_block_assets', 'image_hacker_enqueue_assets' );

Esto es lo que hace este código

  • El hook de acción enqueue_block_editor_assets solicita el script index.js y el archivo editor.css.
  • El hook de acción enqueue_block_assets solicita el archivo style.css.

Ten en cuenta que este código incluye los activos .js y .css ubicados en la carpeta /build/ de tu plugin. Esto significa que, para que funcione, necesitas ejecutar el comando build en tu herramienta de línea de comandos:

npm run build

Ten en cuenta también que cuando importes un archivo llamado style.scss en index.js, el archivo CSS compilado no se llamará style.css sino style-index.css.

Registrar el estilo de bloque

Has completado la configuración de tu entorno de desarrollo. Ahora, puedes pasar a la parte emocionante del proyecto y registrar tu variación de estilo de bloque.

Hay varias formas de registrar estilos de bloque, y la que elijas dependerá de tus objetivos y preferencias personales. Nosotros seguiremos el enfoque JS para construir un plugin de Gutenberg. Abre tu archivo /src/index.js y pega el siguiente código:

// Import the function to register block styles.
import { registerBlockStyle } from '@wordpress/blocks';

// Import the function to run code only when the DOM is ready.
import domReady from '@wordpress/dom-ready';

// This line tells the build process to include and compile our SCSS file.
import './style.scss';

/**
 * Use domReady to run code only when the DOM is ready.
 */
domReady(() => {
	// Register our new style variation for the core image block.
	registerBlockStyle('core/image', {
		name: 'polaroid',
		label: 'Polaroid',
	});
});

registerBlockStyle con domReady garantiza que la variación de estilo sólo se registre cuando el DOM esté completamente cargado. Consulta también la documentación oficial.

Cuando se selecciona el estilo Polaroid, WordPress añade automáticamente la clase .is-style-polaroid a la envoltura del bloque.

El siguiente paso es proporcionar el CSS para tu variación de estilo. Abre tu /src/style.scss y añade el siguiente código:

.wp-block-image.is-style-polaroid {
	padding: 15px 15px 70px 15px;
	background-color: white;
	box-shadow: 0 4px 10px rgba(0, 0, 0, 0.2);
	max-width: 360px;
	transform: rotate(-3deg);
	transition: transform 0.3s ease-in-out;

	figure { 
		margin: 0 !important; 
	}
	
	img { 
		display: block; 
		width: 100%; 
		height: auto; 
	}
	
	figcaption {
    	position: absolute; 
    	bottom: 15px; 
    	left: 0; 
    	right: 0;
    	text-align: center; 
    	font-family: 'Permanent Marker', cursive;
    	color: #333; 
    	font-size: 18px;
	}
}

Guarda tu código, ejecuta npm run build, y salta a tu panel de control de WordPress. Crea una nueva entrada o página y añade una imagen. Con la imagen seleccionada, haz clic en la etiqueta Estilos de la barra lateral del bloque y selecciona Polaroid.

Una nueva variación de estilo para el bloque Imagen
Una nueva variación de estilo para el bloque Imagen

Añade un pie de foto, guarda la entrada y comprueba el resultado en el frontend. Deberías ver una imagen estilo Polaroid con un bonito pie de foto en cursiva.

El elemento figura con la clase is_style_polaroid
El elemento figura con la clase is_style_polaroid

Construye la lógica

El siguiente paso es construir la lógica para animar la imagen. Crearemos una animación sencilla utilizando la propiedad CSS transform. Para empezar, añade el siguiente bloque a tu archivo src/style.scss:

.wp-block-image.is-style-polaroid.has-image-animation:hover {
	transform: rotate(0deg) scale(1.05);
}

Este código garantiza que el efecto hover sólo se aplique si el bloque es una imagen Polaroid y tiene una clase has-image-animation aplicada desde el conmutador de la barra de herramientas.

Ahora, necesitas la lógica para añadir la clase CSS al contenedor de la imagen, que es un elemento figure. Para ello, necesitas algunos filtros y funciones callback.

En primer lugar, añade la siguiente línea a tu archivo src/index.js:

import { addFilter } from '@wordpress/hooks';

Paso 1. Añade un nuevo atributo al bloque Imagen

Utilizarás addFilter para manipular el bloque principal Imagen. Primero, añade un nuevo atributo imageAnimation al bloque Imagen:

function addImageAnimationAttribute( settings, name ) {
	if ( name !== 'core/image' ) {
		return settings;
	}
	settings.attributes = {
		...settings.attributes,
		imageAnimation: {
			type: 'boolean',
			default: false,
		},
	};
	return settings;
}

addFilter(
	'blocks.registerBlockType',
	'image-hacker/add-image-animation-attribute',
	addImageAnimationAttribute
);

La función callback addImageAnimationAttribute recibe dos argumentos:

  • settings – Un array de atributos del bloque actual
  • name – Especifica el nombre del bloque cuyos atributos quieres modificar.

La función devuelve el array de atributos actualizado.

Paso 2. Añadir un control de conmutador al bloque Imagen

A continuación, tendrás que añadir un control a la barra de herramientas del bloque Imagen para activar la animación.

En primer lugar, añade los siguientes imports al archivo index.js:

import { createHigherOrderComponent } from '@wordpress/compose';
import { Fragment } from '@wordpress/element';
import { BlockControls } from '@wordpress/block-editor';
import { ToolbarGroup, ToolbarButton } from '@wordpress/components';
import { __ } from '@wordpress/i18n';

A continuación, añade el siguiente código al final del archivo:

const withPolaroidControls = createHigherOrderComponent((BlockEdit) => {
	return (props) => {
		if (props.name !== 'core/image') {
			return <BlockEdit {...props} />;
		}

		const { attributes, setAttributes, isSelected } = props;
		const { imageAnimation, className, lightbox } = attributes;

		return (
			<Fragment>
				<BlockEdit {...props} />

				<BlockControls>
					<ToolbarGroup>
						<ToolbarButton
							icon="format-image"
							label={__('Toggle Animation', 'image-hacker')}
							isActive={imageAnimation}
							onClick={() =>
								setAttributes({ imageAnimation: !imageAnimation })
							}
						/>
					</ToolbarGroup>
				</BlockControls>
			</Fragment>
		);
	};
}, 'withPolaroidControls');

addFilter(
	'editor.BlockEdit',
	'image-hacker/with-polaroid-controls',
	withPolaroidControls
);

Esto es lo que hace este código

  • La función createHigherOrderComponent crea un componente de orden superior (HOC) que envuelve a BlockEdit, que es el componente principal responsable de mostrar los bloques en el editor.
  • El HOC intercepta el componente y comprueba si se trata de un bloque Imagen. Esto garantiza que todas tus ediciones sólo se apliquen al bloque Imagen.
  • Utilizamos la asignación de desestructuración para extraer las propiedades y atributos necesarios de los objetos props y attributes.
  • Utilizamos BlockControls, ToolbarGroupy ToolbarButton para añadir un botón Activar Animación a la barra de herramientas del bloque.
  • isActive establece el estado por defecto de imageAnimation
  • onClick alterna el valor de imageAnimation.
Se ha añadido un botón personalizado a la barra de herramientas del bloque.
Se ha añadido un botón personalizado a la barra de herramientas del bloque.

Ahora tienes un atributo y un botón. Sin embargo, si haces clic en el botón, no ocurre nada.

Paso 3. Añade la clase CSS al elemento envoltorio

El siguiente paso es aplicar la clase has-image-animation al elemento figure que envuelve la imagen. Para ello, necesitas un filtro que te permita asignar la clase CSS a la imagen en el frontend.

Añade el siguiente código al archivo index.js:

function addAnimationFrontendClass(extraProps, blockType, attributes) {
	if (blockType.name === 'core/image' && attributes.imageAnimation) {
		extraProps.className = `${extraProps.className || ''} has-image-animation`;
	}
	return extraProps;
}

addFilter(
	'blocks.getSaveContent.extraProps',
	'image-hacker/add-animation-frontend-class',
	addAnimationFrontendClass
);

Este código añade dinámicamente la clase CSS has-image-animation al elemento figure cuando el atributo imageAnimation se establece en true.

Intentemos comprender lo que ocurre en detalle.

  • addFilter hace hook en los procesos del editor para modificar datos o comportamientos.
  • blocks.getSaveContent.extraProps es el hook específico al que nos dirigimos. extraProps es un hook especial que te permite añadir atributos HTML adicionales al elemento envoltorio.
  • image-hacker/add-animation-class es el nombre único de tu filtro.
  • addAnimationFrontendClass es el nombre de la función de devolución de llamada que se ejecuta cada vez que se ejecuta el hook blocks.getSaveContent.extraProps. Esta función toma 3 argumentos:
    • extraProps: Un objeto que contiene las propiedades del elemento envoltorio del bloque, como className.
    • blockType: Un objeto con detalles del bloque, como su name (core/image).
    • attributes: Un objeto de atributos del bloque
  • La lógica de la función garantiza que el código sólo se ejecuta cuando blockType.name === 'core/image' y attributes.imageAnimation son true.
  • Si ambas condiciones son verdaderas, la función devuelve un nuevo objeto props con has-image-animation añadido al objeto de clase existente.

Ahora, puedes probarlo tú mismo. Añade una imagen a tu contenido, selecciona el estilo Polaroid en la barra lateral del bloque y haz clic en el botón Activar Animación de la barra de herramientas del bloque. Guarda tu entrada y comprueba el resultado en el frontend. Tu imagen debería girar cuando pases el ratón sobre ella.

clases CSS is_style_polaroid y has_image_animation añadidas al bloque Imagen
clases CSS is_style_polaroid y has_image_animation añadidas al bloque Imagen

Registrar variación de bloque

Las variaciones de bloque son versiones preconfiguradas de un bloque, con un conjunto de atributos y bloques anidados. WordPress trata las variaciones de bloque como bloques independientes, haciéndolas disponibles en el insertador de bloques y marcándolas con un icono personalizado.

Puedes utilizar una variación de bloque para crear una nueva versión del bloque Imagen con el estilo Polaroid aplicado por defecto.

El primer paso es importar la función registerBlockVariation a tu archivo /src/index.js:

import { registerBlockStyle, registerBlockVariation } from '@wordpress/blocks';

Luego añades una llamada a la función registerBlockVariation dentro de domReady(), justo debajo de registerBlockStyle:

domReady(() => {
	// Register a style variation for the image block.
	registerBlockStyle('core/image', {
		name: 'polaroid',
		label: 'Polaroid',
	});

	// Register a block variation of the image block
	registerBlockVariation('core/image', {
		name: 'animated-polaroid',
		title: 'Animated Polaroid',
		icon: 'image-filter',
		attributes: {
			className: 'is-style-polaroid',
			imageAnimation: true,
		},
		scope: ['inserter'],
	});
});

La función registerBlockVariation crea una variación para un bloque existente. Acepta dos argumentos: el nombre del bloque y un objeto que define la variación. (Consulta también la introducción a las variaciones de bloque y la documentación de la API Variaciones de bloque).

Guarda tu archivo, ejecuta la construcción para aplicar los cambios y, a continuación, vuelve al administrador de WordPress. Crea una nueva entrada y busca el bloque Polaroid Animada en el insertador de bloques.

Una variación de bloque en el insertador de bloques
Una variación de bloque en el insertador de bloques

Pruebas y depuración

Hagamos algunas pruebas. Añade una o varias imágenes a una nueva entrada. Selecciona el estilo Polaroid para cada imagen, activa la animación y añade enlaces. Además, haz pruebas con el bloque Galería.

Todo parece funcionar como se espera. Sin embargo, añadir un enlace con efecto lightbox a una imagen con el estilo Polaroid no produce un resultado agradable.

Este extraño comportamiento parece deberse a un problema de compatibilidad entre la caja de luz de WordPress y las transiciones CSS.

Para evitar un proceso de depuración largo y complejo, puedes desactivar la opción Ampliar al hacer clic y añadir una advertencia para notificar a los usuarios que la caja de luz está desactivada.

Primero necesitas importar algunos recursos adicionales. A continuación encontrarás la lista completa de recursos importados desde el archivo /src/index.js:

import { registerBlockStyle, registerBlockVariation } from '@wordpress/blocks';
import domReady from '@wordpress/dom-ready';
import { addFilter } from '@wordpress/hooks';
import { createHigherOrderComponent } from '@wordpress/compose';
import { Fragment, useEffect } from '@wordpress/element';
import { InspectorControls, BlockControls } from '@wordpress/block-editor';
import { PanelBody, Notice, ToolbarGroup, ToolbarButton } from '@wordpress/components';
import { __ } from '@wordpress/i18n';
import { useDispatch } from '@wordpress/data';
import './style.scss';

Hemos añadido las siguientes importaciones:

Ahora cambia la función withPolaroidControls de la siguiente manera:

const withPolaroidControls = createHigherOrderComponent((BlockEdit) => {
	return (props) => {
		if (props.name !== 'core/image') {
			return <BlockEdit {...props} />;
		}

		const { attributes, setAttributes, isSelected } = props;
		const { imageAnimation, className, lightbox } = attributes;

		const isPolaroid = className?.includes('is-style-polaroid');

		const { createNotice } = useDispatch('core/notices');

		useEffect(() => {
			if (isPolaroid && lightbox?.enabled) {
				// Disable the lightbox to prevent the conflict.
				setAttributes({ lightbox: { ...lightbox, enabled: false } });

				// Show the user a temporary 'snackbar' notice.
				createNotice(
					'warning', // The type of notice (info, success, warning, error)
					__('Lightbox disabled for Polaroid style.', 'image-hacker'),
					{
						type: 'snackbar',
						isDismissible: true,
					}
				);
			}
		}, [isPolaroid, lightbox]);

		return (
			<Fragment>
				<BlockEdit {...props} />

				<BlockControls>
					<ToolbarGroup>
						<ToolbarButton
							icon="format-image"
							label={__('Toggle Animation', 'image-hacker')}
							isActive={imageAnimation}
							onClick={() =>
								setAttributes({ imageAnimation: !imageAnimation })
							}
						/>
					</ToolbarGroup>
				</BlockControls>

				{isSelected && isPolaroid && (
					<InspectorControls>
						<PanelBody title={__('Polaroid Style', 'image-hacker')}>
							<Notice status="info" isDismissible={false}>
								{__(
									'The "Expand on click" (lightbox) feature is disabled for this style to prevent visual conflicts.',
									'image-hacker'
								)}
							</Notice>
						</PanelBody>
					</InspectorControls>
				)}
			</Fragment>
		);
	};
}, 'withPolaroidControls');
  • useEffect es un Hook React que «te permite sincronizar un componente con un sistema externo». El código se ejecuta después de que el componente se haya renderizado y cada vez que cambie un valor del array de dependencias [isPolaroid, lightbox]. La comprobación sólo se ejecuta cuando el usuario aplica o elimina el estilo Polaroid o activa o desactiva la caja de luz (consulta la documentación de React).
  • La condición if (isPolaroid() && lightbox.enabled) garantiza que el código sólo se ejecute si la imagen tiene el estilo Polaroid y la opción lightbox está activada.
  • Si la condición es true, la caja de luz se desactiva y aparece un aviso temporal. (Ver también la referencia de datos Avisos).
  • La condición isSelected && isPolaroid genera un nuevo panel en la barra de herramientas del bloque de imagen para notificar a los usuarios que la caja de luz está desactivada. A diferencia de la barra de herramientas, este panel muestra un aviso permanente.
La opción Ampliar al hacer clic está desactivada.
La opción Ampliar al hacer clic está desactivada.

Resumen

En este tutorial, hemos profundizado en algunas de las funcionalidades más interesantes y potentes para desarrolladores del editor de bloques de WordPress a través de un proyecto real: hemos ampliado el bloque Imagen básico con funcionalidades que no están disponibles de serie, con estilos personalizados y efectos de animación.

Hemos seguido un enfoque de mejora progresiva, creando una variación de estilo de bloque para el bloque Imagen. Esto permite a los usuarios dar fácilmente a sus imágenes un aspecto clásico de Polaroid.

A continuación, hemos añadido un botón específico a la barra de herramientas del bloque Imagen, que permite a los usuarios crear un atractivo efecto de animación al pasar el cursor por encima.

Por último, lo hemos completado creando una variación del bloque preconfigurada con el estilo Polaroid y los ajustes de animación aplicados por defecto.

Esperamos que las ideas y técnicas que has adquirido en este tutorial te permitan crear algunas personalizaciones realmente sorprendentes para los bloques principales de Gutenberg.

¡Feliz programación!

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.