Gutenberg maakt het gemakkelijk om met blokken content op te bouwen, maar soms heb je controle nodig over welke blokken beschikbaar zijn. Misschien werk je aan een site van een klant en wil je voorkomen dat ze bepaalde blokken gaan gebruiken. Of misschien wil je de bewerkingservaring stroomlijnen door overbodige opties te verwijderen.
In deze gids bekijken we verschillende manieren om Gutenberg blokken uit te schakelen, waaronder:
- De WordPress gebruikersinterface (UI) gebruiken om blokken in de inserter te verbergen
- Blokken vergrendelen om te voorkomen dat ze verplaatst of verwijderd worden
- Afdwingen van blokbeperkingen met PHP, inclusief op rollen gebaseerde toegang
Dat gezegd hebbende, zullen we niet ingaan op de zichtbaarheid van blokken (inhoud tonen/verbergen op basis van voorwaarden) of het uitschakelen van specifieke blokinstellingen zoals tekst of achtergrondkleuren, wat wordt afgehandeld in theme.json
. We zullen het echter wel hebben over blokvergrendeling, omdat dit nauw verwant is aan het uitschakelen van blokken.
Alle methoden in deze gids werken zonder plugins en zijn van toepassing op elk thema dat op blokken is gebaseerd. Tijd om aan de slag te gaan!
Blokken uitschakelen met de WordPress UI
Het verwijderen van onnodige blokken helpt bij het stroomlijnen van de bewerkingservaring en kan de backend prestaties enigszins verbeteren, omdat uitgeschakelde blokken niet in het geheugen worden geladen.
Elke gebruiker kan blokken uitschakelen via het Preferences menu in de blokkeneditor. Je kunt dit doen door te klikken op het menu Setting (⋮) met drie puntjes in de rechterbovenhoek om de voorkeuren van de editor te openen. Vervolgens kunnen gebruikers onder het tabblad Blocks elk blok uitvinken om het te verwijderen uit de blok inserter.
Je kunt bijvoorbeeld het blok Quote uitschakelen door het vakje simpelweg uit te vinken, zoals hieronder te zien is.

Als je meer wil, kun je zelfs een hele blokcategorie uitschakelen. Als je bijvoorbeeld de categorie Text uitschakelt, worden alle tekstgerelateerde blokken uit de invoegtoepassing verwijderd, zodat ze niet langer beschikbaar zijn voor gebruik. Dit kan handig zijn om de editor te stroomlijnen en om te voorkomen dat gebruikers onnodige blokken gebruiken.

Blokken uitschakelen met PHP
Er zijn twee fundamentele en zeer verschillende benaderingen om het gebruik van een blok toe te staan of te voorkomen met WordPress. Afhankelijk van je behoeften kun je ervoor kiezen om toe te staan of te weigeren dat een blok beschikbaar is in de inserter.
Beide benaderingen kunnen worden geïmplementeerd met PHP of JavaScript, elk met zijn eigen voor- en nadelen. PHP is over het algemeen eenvoudiger voor het toestaan van blokken, terwijl JavaScript vaak efficiënter is voor het weigeren van blokken.
We gebruiken PHP voor al onze voorbeelden om verschillende gebruikssituaties te demonstreren.
Blokken toestaan
Om alleen specifieke blokken toe te staan in de inserter, gebruik je het volgende filter. Dit zorgt ervoor dat alleen de aangewezen blokken beschikbaar zijn voor alle gebruikers:
add_filter('allowed_block_types_all', 'allowed_block_types_all_users', 10, 2 );
function allowed_block_types_all_users( $allowed_blocks, $block_editor_context ) {
return array(
'core/paragraph',
'core/heading',
'core/image',
'core/cover',
'core/list',
'core/list-item'
);
}
Deze code moet worden toegevoegd aan het functions.php
bestand van een childthema om te voorkomen dat wijzigingen verloren gaan wanneer het thema wordt bijgewerkt.
Als je deze methode gebruikt, zorg er dan voor dat alle benodigde childblokken zijn opgenomen. Als je bijvoorbeeld het blok core/list
toestaat, moet je ook core/list-item
opnemen om fouten te voorkomen.

Het allowed_block_types_all
filter geeft ontwikkelaars controle over de blokken die beschikbaar zijn in de inserter. Het accepteert twee parameters:
$allowed_block_types
– Een array of boolean die de toegestane blokken definieert (standaard: true).$block_editor_context
– Geeft informatie over de huidige status van de blokeditor, inclusief het bericht dat wordt bewerkt.
Specifieke blokken toestaan voor contributors en auteurs
De volgende code beperkt de beschikbare blokken voor gebruikers zonder de mogelijkheid publish_pages
(contributors en auteurs):
add_filter('allowed_block_types_all', 'allowed_block_types_for_non_admins', 10, 2);
function allowed_block_types_for_non_admins($allowed_blocks, $block_editor_context) {
// Apply restrictions if the user does not have the 'publish_pages' capability
if (!current_user_can('publish_pages')) {
// Define the allowed blocks for users without 'publish_pages' capability
$allowed_blocks = array(
'core/paragraph',
'core/heading',
'core/image',
'core/cover',
'core/list',
'core/list-item'
);
}
return $allowed_blocks;
}
In het bovenstaande voorbeeld kunnen contributors en auteurs alleen de blokken Paragraph, Heading, Image, Cover, List en List Item gebruiken.
Blokken toestaan voor specifieke berichttypen en gebruikers
De volgende code voegt het Shortcode blok toe aan de inserter bij het bewerken van een pagina, maar houdt het onbeschikbaar voor andere berichttypen:
add_filter('allowed_block_types_all', 'allowed_block_types', 25, 2);
function allowed_block_types($allowed_blocks, $editor_context) {
$allowed_blocks = array(
'core/paragraph',
'core/heading',
'core/image',
'core/cover',
'core/list',
'core/list-item'
);
// Check if the editor context has a post object and if its type is 'page'
if (!empty($editor_context->post) && 'page' === $editor_context->post->post_type) {
$allowed_blocks[] = 'core/shortcode';
}
return $allowed_blocks;
}
Houd er rekening mee dat, omdat contributors en auteurs geen pagina’s kunnen maken of wijzigen, het resultaat alleen in een bericht zal verschijnen.
Alle gebruikers zien alleen zes blokken, maar administrators en redacteuren zien ook het shortcodeblok dat alleen beschikbaar is voor een pagina.

In ons voorbeeld is de invloed hiervan op contributors en auteurs nihil, omdat zij standaard geen nieuwe pagina’s kunnen toevoegen. Het gebruik van een Role Manager plugin zou die mogelijkheid echter kunnen veranderen.
Blokken toestaan op basis van bericht-ID
Als er gevallen zijn waarin je een set blokken alleen wilt toestaan voor bepaalde berichten, dan kun je dat hier doen:
add_filter('allowed_block_types_all', 'allowed_block_types', 10, 2);
function allowed_block_types($allowed_blocks, $editor_context) {
// Check if the editor context has a post object
if (!empty($editor_context->post)) {
$post_id = $editor_context->post->ID;
// Define allowed blocks for specific post IDs
$allowed_blocks_by_post = array(
2 => array('core/paragraph', 'core/heading', 'core/image'),
3 => array('core/paragraph', 'core/heading', 'core/image')
);
// Check if the current post ID has a defined allowed blocks array
if (array_key_exists($post_id, $allowed_blocks_by_post)) {
return $allowed_blocks_by_post[$post_id];
}
}
return $allowed_blocks;
}
In dit voorbeeld zullen alleen Paragraph, Heading en Image blokken beschikbaar zijn voor post-ID’s 2 en 3.

Dit is prima voor een kleine set post-ID’s. Maar als je een dynamische situatie hebt waarin voortdurend pagina’s of berichten worden toegevoegd, overweeg dan om te filteren op taxonomieën en aangepaste velden.
Blokken weigeren
Allow-listing is impliciet een vorm van deny-listing, omdat blokken die niet beschikbaar zijn worden geweigerd. Maar je kunt een omgekeerde benadering gebruiken als je liever de meeste blokken toestaat, behalve een paar. In dit voorbeeld zijn de blokken Heading en Cover niet langer beschikbaar voor gebruikers.
add_filter('allowed_block_types_all', 'deny_blocks');
function deny_blocks($allowed_blocks) {
// Get all registered blocks
$blocks = WP_Block_Type_Registry::get_instance()->get_all_registered();
// Disable two specific blocks
unset($blocks['core/heading']);
unset($blocks['core/cover']);
return array_keys($blocks);
}
In feite vinden we alle geregistreerde blokken en verwijderen dan de blokken Heading en Cover.
Wees voorzichtig als je denkt dat je elk blok met deze methode kunt verwijderen. Als een blok – core of anders – is geregistreerd met JavaScript, moet je het afmelden met JavaScript.
Gehele blokcategorieën weigeren
Als je hele categorieën blokken wilt verwijderen, zoals Widgets, Embeds of Theme blokken, gebruik dan deze aanpak:
add_filter('allowed_block_types_all', 'disable_blocks_by_categories', 10, 2);
function disable_blocks_by_categories($allowed_blocks, $editor_context) {
// Get all registered blocks
$registered_blocks = WP_Block_Type_Registry::get_instance()->get_all_registered();
// Specify the categories to disable
$categories_to_disable = array('widgets', 'embed', 'theme');
// Initialize an array to hold allowed block names
$allowed_block_names = array();
// Loop through registered blocks
foreach ($registered_blocks as $block_name => $block_type) {
// Check if the block has categories defined
if (isset($block_type->category)) {
// If the block's category is NOT in the disabled list, allow it
if (!in_array($block_type->category, $categories_to_disable, true)) {
$allowed_block_names[] = $block_name;
}
} else {
// If the block has no category defined, allow it by default
$allowed_block_names[] = $block_name;
}
}
return $allowed_block_names;
}
Deze aanpak filtert hele categorieën blokken uit, wat de ervaring van de blokkeneditor vereenvoudigt.

Blokken vergrendelen met de WordPress UI
Door een blok te vergrendelen voorkom je dat het verplaatst of verwijderd kan worden, terwijl het nog steeds mogelijk is om content te bewerken. Elke gebruiker kan een blok op elk moment vergrendelen of ontgrendelen met de Lock optie in de blokkentoolbar.
Om een blok te vergrendelen of te ontgrendelen, klik je op de drie-punt Settings (⋮) op het blok, klik je op Lock en vervolgens selecteer je de optie Lock all om automatisch zowel Verplaatsen als Verwijderen te voorkomen, maar deze opties kunnen ook afzonderlijk worden toegepast.

Het is belangrijk om te weten dat zelfs als een blok is vergrendeld, gebruikers nog steeds de inhoud en stijl ervan kunnen wijzigen, tenzij er verdere beperkingen worden toegepast.
Het voorkomen van stylingwijzigingen is niet mogelijk met de Lock feature. Om de styling van een blok te beperken, moeten er wijzigingen worden aangebracht in het theme.json
bestand.
Voor blokken die nested elementen bevatten, is er een extra optie om alleen het bovenliggende blok te blokkeren of ook alle binnenliggende blokken te blokkeren. Dit zorgt ervoor dat gegroepeerde elementen gestructureerd blijven, terwijl er toch gecontroleerde bewerkingen binnen mogelijk zijn.

Blokken vergrendelen met PHP
Hoewel de WordPress UI simpele blokvergrendeling biedt, legt het geen beperkingen op voor de hele site. Elke gebruiker met editor-toegang kan een blok ontgrendelen, waardoor het gemakkelijk is om vergrendelde inhoud te overschrijven. Om het blokkeren van blokken permanent te beperken, is PHP de beste oplossing.
Met PHP kun je de mogelijkheid om blokken te vergrendelen en te ontgrendelen volledig verwijderen, zodat geen enkele gebruiker de beperkingen kan omzeilen. Dit is hoe WordPress werkte voor de release van WordPress 5.9, toen blokvergrendeling werd geïntroduceerd.
Blokvergrendeling is nuttig in veel scenario’s, vooral bij het onderhouden van gestructureerde inhoud. Door blokbeperkingen af te dwingen met PHP kun je:
- De integriteit van het ontwerp behouden door te voorkomen dat gebruikers belangrijke blokken wijzigen.
- Onbedoelde bewerkingen voorkomen die lay-outs kunnen afbreken.
- Het maken van inhoud stroomlijnen door onnodige opties te beperken.
- Zorgen voor consistentie in patronen en sjablonen, vooral voor klantprojecten.
Blokkeerfunctie verwijderen voor alle gebruikers
Het volgende PHP fragment schakelt blokvergrendeling volledig uit, zodat geen enkele gebruiker blokken kan vergrendelen of ontgrendelen:
add_filter('block_editor_settings_all', 'example_disable_block_locking', 10, 2);
function example_disable_block_locking($settings, $context) {
$settings['canLockBlocks'] = false;
return $settings;
}
Als dit wordt toegepast, wordt de blokvergrendelingsfeature volledig verwijderd uit de blokeditor. Gebruikers zien de vergrendelopties niet en niemand, ongeacht zijn rol, kan blokken vergrendelen of ontgrendelen.
Voor gebruikers die hun site hosten bij Kinsta is het aanbrengen van wijzigingen in themabestanden eenvoudig en veilig met SFTP, dat standaard is ingeschakeld voor alle WordPress sites.
Blokvergrendeling beperken op basis van gebruikersrollen
In plaats van blokvergrendeling helemaal te verwijderen, wil je misschien beperken wie blokken kan vergrendelen en ontgrendelen. Met het volgende PHP fragment kunnen alleen administrators en redacteuren blokvergrendelingen wijzigen, terwijl auteurs en contributors geen blok kunnen ontgrendelen dat door een administrator of redacteur is ingesteld.
add_filter('block_editor_settings_all', 'example_disable_block', 10, 2);
function example_disable_block ($settings, $context ) {
if (
isset( $context->post ) &&
'post' === $context->post->post_type &&
! current_user_can( 'edit_theme_options' )
) {
$settings['canLockBlocks'] = false;
$settings['codeEditingEnabled'] = false;
}
return $settings;
}
Deze aanpak beperkt de blokcontrole tot gebruikers met de mogelijkheid edit_theme_options
, meestal beheerders en bewerkers. Auteurs en medewerkers kunnen geen blokken ontgrendelen die zijn ingesteld door gebruikers van een hoger niveau.
Daarnaast is de toegang tot de Code Editor uitgeschakeld, zodat gebruikers niet handmatig blokmarkeringen kunnen wijzigen om beperkingen te omzeilen. Dit zorgt ervoor dat vergrendelde blokken onveranderd blijven, zelfs door gebruikers met codeerkennis.
Samenvatting
De keuze om blokken toe te staan of te weigeren – of een combinatie van beide – hangt af van je specifieke behoeften. Misschien wil je bepaalde blokken beperken voor een strakkere bewerkingservaring, ontwerpconsistentie afdwingen of toegang regelen op basis van gebruikersrollen.
Over gebruikersrollen gesproken: mogelijkheden kunnen worden aangepast om verder aan te passen hoe blokken worden beheerd. Dit opent nog meer mogelijkheden dan wat we hier hebben behandeld.
Houd in gedachten dat WordPress in de loop van de tijd evolueert. Toekomstige updates kunnen nieuwe manieren introduceren om blokken te beheren of bestaande functionaliteit aanpassen, dus op de hoogte blijven van de ontwikkelingen van WordPress is belangrijk om ervoor te zorgen dat je aanpak effectief blijft.
Ben je op zoek naar een veilige en ontwikkelaarvriendelijke hostingoplossing? Kinsta maakt het eenvoudig om je WordPress bestanden te beheren, inclusief het bewerken van themabestanden via SFTP, zodat je veilige en naadloze aanpassingen kunt doen zonder de stabiliteit van je site in gevaar te brengen.