# Le tableau deprecated d’un bloc : migrer sans casser le contenu existant

> Comment fonctionne le tableau deprecated d'un bloc, et pourquoi il permet de faire évoluer sa structure sans invalider le contenu déjà publié par les utilisateurs.

- Auteur : Clément Hadrot
- Publié le : 2026-04-27
- Mis à jour le : 2026-04-27
- Catégorie : Blocs Gutenberg
- URL : https://wpmoderne.dev.wordpress-developpement.fr/blocs/tableau-deprecated-bloc-migrer-sans-casser-contenu/

## L’essentiel

- Chaque entrée deprecated décrit un ancien schéma d'attributs et son ancien save
- WordPress teste les entrées dans l'ordre jusqu'à trouver une correspondance valide
- Une fonction migrate peut convertir automatiquement les anciens attributs vers les nouveaux

« Ce bloc contient une erreur inattendue » : ce message, familier de tout développeur qui a fait évoluer un bloc en production, apparaît quand le `save` actuel ne parvient plus à reproduire fidèlement le HTML enregistré pour du contenu ancien. Le tableau `deprecated` existe précisément pour éviter ce message. Ce guide s'adresse aux mainteneurs de blocs distribués qui doivent faire évoluer une structure sans casser le contenu déjà publié ; il ne traite pas des mythes généraux de maintenance logicielle, qui relèvent d'un autre sujet.

Le mécanisme repose sur un principe simple : quand WordPress charge un contenu de bloc et que le `save` actuel ne produit pas exactement le même HTML que celui enregistré, l'éditeur parcourt les entrées du tableau `deprecated`, dans l'ordre, jusqu'à trouver une version dont le `save` correspond au contenu existant.

## Ce que contient une entrée deprecated

Chaque entrée du tableau reproduit la structure attendue au moment où le bloc portait cette ancienne forme : les attributs tels qu'ils étaient déclarés alors, et la fonction `save` qui produisait le HTML correspondant. Prenons un bloc qui, à sa création, enregistrait un simple texte dans un attribut `libelle`, avant de migrer vers une structure à deux champs distincts, `titre` et `description` :

```
const deprecated = [
	{
		attributes: {
			libelle: {
				type: 'string',
				source: 'html',
				selector: 'p',
			},
		},
		save( { attributes } ) {
			return <p>{ attributes.libelle }</p>;
		},
	},
];
```

## La fonction migrate pour convertir les anciennes valeurs

Une entrée `deprecated` peut aller plus loin qu'une simple compatibilité d'affichage, grâce à une fonction `migrate` qui convertit les anciens attributs vers le nouveau schéma, de façon à ce que le contenu ancien profite lui aussi, une fois converti, des nouvelles fonctionnalités du bloc :

```
const deprecated = [
	{
		attributes: {
			libelle: {
				type: 'string',
				source: 'html',
				selector: 'p',
			},
		},
		migrate( attributes ) {
			return {
				titre: attributes.libelle,
				description: '',
			};
		},
		save( { attributes } ) {
			return <p>{ attributes.libelle }</p>;
		},
	},
];
```

> L'essentiel à retenir : Chaque entrée deprecated décrit un ancien schéma d'attributs et son ancien save ; WordPress teste les entrées dans l'ordre jusqu'à trouver une correspondance valide ; Une fonction migrate peut convertir automatiquement les anciens attributs vers les nouveaux

Une fois la correspondance trouvée et la migration appliquée, WordPress réenregistre automatiquement le bloc avec le `save` actuel, dès la prochaine sauvegarde de l'article concerné, sans intervention manuelle de l'utilisateur.

## L'ordre des entrées, un détail qui compte

WordPress teste les entrées du tableau `deprecated` dans l'ordre où elles apparaissent, la plus récente étant conventionnellement placée en premier. Cet ordre a une importance réelle sur un bloc qui a connu plusieurs migrations successives : placer une ancienne entrée avant une plus récente peut, dans de rares cas de chevauchement de structure, faire correspondre le contenu à la mauvaise version.

### Quand aucune entrée ne correspond

Si aucune entrée du tableau `deprecated`, ni le `save` actuel, ne parvient à reproduire le HTML enregistré, WordPress affiche le bloc en état invalide, avec une proposition de récupération ou de conversion en HTML brut. C'est le signal qu'une entrée `deprecated` manque, ou que sa condition `isEligible` optionnelle ne couvre pas correctement le cas rencontré.

- Toujours ajouter une entrée `deprecated` avant de modifier le `save` d'un bloc déjà utilisé en production.
- Tester la migration sur un contenu réel exporté du site concerné, pas seulement sur un exemple minimal.
- Vérifier que la fonction `migrate`, si présente, couvre bien tous les champs de l'ancien schéma, y compris ceux laissés vides.

> Un conseil qui évite bien des messages d'erreur en production : ne jamais supprimer une entrée `deprecated` tant qu'un contenu publié peut encore s'appuyer sur elle, même des années après son ajout.

## En résumé

Le tableau `deprecated` transforme une modification potentiellement destructrice du `save` d'un bloc en une évolution transparente pour l'utilisateur final, à condition de documenter fidèlement chaque ancienne structure et, si nécessaire, de fournir une fonction `migrate` qui convertit les anciens attributs vers le nouveau schéma. Négliger cette étape expose directement le contenu existant à un état invalide dès la prochaine modification du bloc.
