Sur un site vitrine livré à un client peu technique, laisser l’intégralité des blocs disponibles dans l’éditeur — blocs de requête, blocs de navigation, blocs de colonnes imbriquées à l’infini — revient à offrir un trop grand nombre de façons de casser la mise en page. Le filtre allowed_block_types_all, introduit avec WordPress 5.8 en remplacement de l’ancien allowed_block_types, permet de restreindre précisément la liste proposée.
Cet article se concentre sur ce filtre et sur le ciblage par type de contenu ou par rôle ; il ne traite pas du verrouillage de blocs individuels dans un modèle, qui répond à un besoin différent.
Le remplacement de allowed_block_types par allowed_block_types_all
L’ancien filtre allowed_block_types ne recevait pas le contexte de l’éditeur (contexte du site, du contenu édité) dans ses paramètres, ce qui limitait les possibilités de filtrage conditionnel. allowed_block_types_all reçoit en second paramètre un objet WP_Block_Editor_Context, qui expose notamment le contenu en cours d’édition.
function agence_limiter_blocs( $blocs_autorises, $contexte ) {
return array(
'core/paragraph',
'core/heading',
'core/image',
'core/list',
'core/quote',
'core/buttons',
'core/button',
);
}
add_filter( 'allowed_block_types_all', 'agence_limiter_blocs', 10, 2 );
Le retour peut aussi être true pour tout autoriser, ou false pour tout interdire ; un tableau de slugs, comme ci-dessus, reste la forme la plus utile en pratique.
Filtrer selon le type de contenu édité

Le contexte fourni en second paramètre permet de proposer une liste différente selon le type de contenu, par exemple une liste plus permissive sur les pages que sur les articles de blog.
function agence_limiter_blocs_par_type( $blocs_autorises, $contexte ) {
if ( isset( $contexte->post ) && 'page' === $contexte->post->post_type ) {
return array(
'core/paragraph', 'core/heading', 'core/image', 'core/columns',
'core/column', 'core/group', 'core/buttons', 'core/button',
'core/cover',
);
}
return array( 'core/paragraph', 'core/heading', 'core/image', 'core/list', 'core/quote' );
}
add_filter( 'allowed_block_types_all', 'agence_limiter_blocs_par_type', 10, 2 );
Filtrer selon le rôle de l’utilisateur
Sur un site où plusieurs profils de rédacteurs interviennent, il est parfois utile de réserver certains blocs de mise en page aux éditeurs et administrateurs, tout en laissant les contributeurs se concentrer sur des blocs de contenu simples.
function agence_limiter_blocs_par_role( $blocs_autorises, $contexte ) {
if ( current_user_can( 'manage_options' ) ) {
return true; // Administrateurs : tous les blocs
}
return array( 'core/paragraph', 'core/heading', 'core/image', 'core/list' );
}
add_filter( 'allowed_block_types_all', 'agence_limiter_blocs_par_role', 10, 2 );
Désactiver des variations de bloc inutiles
Certains blocs proposent des variations qui n’apparaissent pas comme des blocs distincts dans allowed_block_types_all, mais comme des préréglages du même bloc — c’est le cas des variations d’intégration (core/embed propose YouTube, Twitter, Instagram, etc. comme variations du même bloc technique). Pour retirer certaines de ces variations sans toucher au bloc lui-même, le filtre côté JavaScript blocks.registerBlockType ou la fonction wp.blocks.unregisterBlockVariation() entre en jeu, dans un script chargé sur l’écran d’édition.
wp.domReady( function() {
wp.blocks.unregisterBlockVariation( 'core/embed', 'tiktok' );
wp.blocks.unregisterBlockVariation( 'core/embed', 'wordpress-tv' );
} );
Vérifier l’effet réel dans l’éditeur
- Ouvrir l’inserteur de blocs (icône « + ») et vérifier que seuls les blocs autorisés apparaissent.
- Tester le raccourci barre oblique (
/) : il doit lui aussi ne proposer que les blocs filtrés. - Vérifier qu’un bloc retiré, s’il existait déjà dans du contenu ancien, continue de s’afficher côté front-end — le filtre agit sur l’insertion, pas sur le rendu du contenu existant.
Sur les projets où plusieurs rédacteurs se relaient, je documente toujours la liste des blocs autorisés dans le fichier source lui-même, en commentaire : six mois plus tard, personne ne se souvient pourquoi le bloc Galerie a disparu de l’inserteur.
En résumé
allowed_block_types_all a remplacé allowed_block_types précisément pour permettre un filtrage contextuel, selon le type de contenu ou l’utilisateur connecté. Combiné au retrait ciblé de certaines variations via l’API JavaScript, ce filtre transforme un éditeur de blocs par nature très ouvert en outil taillé pour les besoins réels d’un client, sans jamais toucher au contenu déjà publié.