# Verrouillage insert ou all dans un template InnerBlocks

> « all » et « insert » se ressemblent sur le papier, mais l'un laisse un client réorganiser son contenu et l'autre le fige totalement. La nuance mérite d'être testée avant livraison.

- Auteur : Clément Hadrot
- Publié le : 2021-06-29
- Mis à jour le : 2021-06-29
- Catégorie : Blocs Gutenberg
- URL : https://wpmoderne.dev.wordpress-developpement.fr/blocs/templatelock-insert-all-innerblocks-nuances/

## L’essentiel

- all bloque insertion suppression et déplacement
- insert bloque seulement l'ajout et la suppression
- false laisse le template purement indicatif

Une agence livrait un bloc « Section Avantages » à un client e-commerce vendant du matériel de randonnée, composé d'un titre et de trois colonnes d'icônes avec texte, prévu pour rester strictement identique sur toutes les fiches produit. Le développeur avait choisi `templateLock="all"`, satisfait d'un rendu figé conforme à la maquette. Deux semaines après la mise en production, le client a signalé qu'il ne pouvait plus réordonner ses trois colonnes pour mettre en avant l'avantage le plus pertinent selon la saison, une opération pourtant censée rester possible d'après le cahier des charges initial.

Ce cas illustre une confusion fréquente entre les différentes valeurs acceptées par la prop `templateLock` d'un composant `InnerBlocks` : toutes ne verrouillent pas le même niveau de liberté, et la différence entre « all » et « insert » change concrètement ce qu'un client final peut ou ne peut pas faire une fois le bloc inséré.

## all : le verrouillage total

Avec `templateLock="all"`, aucune des trois opérations de base sur les blocs enfants n'est permise : impossible d'insérer un nouveau bloc, impossible d'en supprimer un existant, et impossible de réordonner ceux déjà présents par glisser-déposer. C'est le niveau adapté à un contenu strictement figé, comme un pied de page légal ou un bandeau de mentions obligatoires qui ne doit jamais être modifié, y compris dans son ordre d'affichage.

```
<InnerBlocks
    template={ TEMPLATE }
    templateLock="all"
/>
```

## insert : verrouiller la composition, pas l'ordre

Avec `templateLock="insert"`, l'ajout et la suppression de blocs enfants restent bloqués, mais le déplacement des blocs déjà présents reste possible. C'est exactement le comportement que cherchait l'agence de l'exemple précédent : un nombre et une nature de blocs enfants fixes, mais un ordre laissé à la discrétion du rédacteur ou du client final.

> L'essentiel à retenir : all bloque insertion suppression et déplacement ; insert bloque seulement l'ajout et la suppression ; false laisse le template purement indicatif

```
<InnerBlocks
    template={ TEMPLATE }
    templateLock="insert"
/>
```

Sur le projet de l'agence, remplacer `all` par `insert` a réglé le problème signalé par le client sans nécessiter la moindre ligne de code supplémentaire, un changement d'une seule valeur de chaîne de caractères qui a évité un aller-retour de développement complet.

## false : un template purement indicatif

Avec `templateLock={ false }`, ou l'absence totale de la prop, le template ne sert qu'à préremplir les blocs enfants à l'insertion initiale du bloc parent : une fois posé sur la page, l'utilisateur peut ensuite ajouter, supprimer et réordonner librement, sans aucune contrainte héritée du template. C'est le comportement par défaut, adapté aux blocs composés dont la structure de départ n'est qu'une suggestion.

| Valeur | Insertion | Suppression | Réordonnancement |
| --- | --- | --- | --- |
| `all` | Bloquée | Bloquée | Bloqué |
| `insert` | Bloquée | Bloquée | Autorisé |
| `false` | Autorisée | Autorisée | Autorisé |

## Le verrouillage hérite de son parent

Un piège fréquent apparaît dans les blocs imbriqués sur plusieurs niveaux : le verrouillage défini sur un `InnerBlocks` de premier niveau s'applique par défaut à ses enfants directs, mais un `InnerBlocks` imbriqué plus profondément peut redéfinir sa propre valeur de `templateLock`, y compris pour l'assouplir localement. Ne pas vérifier ce comportement en cascade conduit parfois à des blocs enfants qui semblent verrouillés « par accident », alors qu'aucune valeur explicite n'a été fixée à leur niveau.

- Vérifier le comportement réel avec un compte utilisateur aux droits limités, pas seulement en tant qu'administrateur.
- Tester explicitement le glisser-déposer, pas seulement l'ajout et la suppression.
- Documenter dans le README du plugin quel niveau de verrouillage a été choisi et pourquoi, pour la prochaine personne qui reprendra le code.

## Le verrouillage global peut aussi se désactiver par filtre

Il existe également un verrouillage global au niveau du thème via le filtre `block_editor_settings_all`, qui peut forcer un comportement pour tout le site indépendamment de ce que chaque bloc déclare individuellement. Sur un projet où le rendu semblait incohérent d'un bloc à l'autre, la cause s'est révélée être un tel filtre ajouté par une extension de sécurité tierce, qui verrouillait silencieusement toute la structure de contenu au nom d'une politique éditoriale générique.

## Notre verdict

Choisir entre `all` et `insert` n'est jamais un détail cosmétique : c'est une décision produit qui définit précisément la marge de manœuvre laissée au client final. Avant de livrer un bloc composé verrouillé, mieux vaut se poser la question du réordonnancement explicitement avec le client plutôt que de deviner sa réponse, l'un des deux niveaux étant presque toujours le bon choix, jamais l'autre par défaut.
