È facile creare contenuti con i blocchi di Gutenberg, ma a volte bisogna controllare quali sono i blocchi disponibili. A volte si lavora sul sito di un cliente e si vuole impedire che questo usi determinati blocchi. Altre volte si può avere la necessità di semplificare l’esperienza di editing eliminando opzioni non necessarie.
In questa guida vedremo come disabilitare i blocchi di Gutenberg in diversi modi:
- Usando l’interfaccia utente di WordPress per nascondere i blocchi nel pannello di inserimento.
- Bloccando i blocchi per evitare che vengano spostati o eliminati
- Applicando le restrizioni dei blocchi con PHP, ad esempio restringendo l’accesso in base ai ruoli
Detto questo, non tratteremo la visibilità dei blocchi (mostrare/nascondere il contenuto in base a delle condizioni) o la disattivazione di impostazioni specifiche dei blocchi come il testo o i colori di sfondo, che vengono gestiti tramite il file theme.json
. Vedremo invece come bloccare i blocchi perché questo è strettamente legato alla disattivazione.
Tutti i metodi descritti in questa guida non richiedono plugin e sono applicabili a qualsiasi tema basato sui blocchi. Iniziamo!
Disabilitare i blocchi dall’interfaccia di WordPress
Rimuovendo i blocchi non necessari, si rende più fluida l’esperienza di editing e si migliorano leggermente le prestazioni del backend, perché i blocchi disabilitati non vengono caricati in memoria.
Ogni utente può disabilitare i blocchi dal menu Preferenze dell’editor dei blocchi. Vi si accede facendo clic sul pulsante Impostazioni (i tre punti ⋮) nell’angolo in alto a destra. Quindi, nella scheda Blocchi, gli utenti possono deselezionare qualsiasi blocco per rimuoverlo dal pannello di inserimento dei blocchi.
Si può, ad esempio, disabilitare il blocco Citazione semplicemente deselezionando la casella corrispondente, come mostrato di seguito.

Se si desidera andare oltre, si può disabilitare un’intera categoria di blocchi. Ad esempio, deselezionando la categoria Testo, vengono rimossi dal pannello di inserimento tutti i blocchi relativi al testo, in modo che non siano più disponibili per l’uso. Questo può essere utile per snellire l’editor e impedire agli utenti di accedere a blocchi non necessari.

Disabilitare i blocchi con PHP
Per consentire o impedire l’utilizzo di un blocco con WordPress si possono seguire due approcci ben distinti. A seconda delle esigenze, si può scegliere se consentire o impedire che un blocco sia disponibile nel pannello di inserimento.
Entrambi gli approcci possono essere implementati utilizzando PHP o JavaScript. Le due soluzioni hanno ognuna i propri vantaggi e svantaggi. La soluzione basata su PHP è generalmente più semplice quando si vuole consentire l’inserimento di blocchi, mentre il metodo JavaScript è spesso più efficiente quando si tratta di negarne l’inserimento.
Nei nostri esempi utilizzeremo PHP per dimostrare i vari casi d’uso.
Consentire l’inserimento di blocchi
Per visualizzare nell’inseritore solo blocchi specifici, si può utilizzare il seguente filtro, utile per garantire che solo i blocchi stabiliti siano disponibili per tutti gli utenti:
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'
);
}
Questo codice va aggiunto al file functions.php
di un child theme per evitare che le modifiche vengano perse quando il tema viene aggiornato.
Con questo metodo è necessario assicurarsi che siano inclusi tutti i blocchi child necessari. Ad esempio, se si consente l’uso del blocco core/list
, per evitare errori bisogna includere anche core/list-item
.

Il filtro allowed_block_types_all
permette di controllare i blocchi disponibili nel pannello di inserimento. Accetta due parametri:
$allowed_block_types
– Un array o un booleano che definisce i blocchi consentiti (default: true).$block_editor_context
– Fornisce informazioni sullo stato attuale dell’editor dei blocchi, compreso il post in fase di modifica.
Consentire l’inserimento di blocchi specifici per collaboratori e autori
Il codice che segue limita i blocchi disponibili per gli utenti che non dispongono della funzionalità publish_pages
(collaboratori e autori):
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 questo esempio, i collaboratori e gli autori possono utilizzare solo i blocchi paragrafo, titolo, immagine, copertina ed elenco.
Consentire l’inserimento di blocchi per tipi di post e utenti specifici
Il codice che segue aggiunge il blocco Shortcode al pannello di inserimento quando si modifica una pagina, ma non lo rende disponibile per altri tipi di post:
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;
}
Si tenga presente che, dato che i collaboratori e gli autori non possono creare o modificare le pagine, il risultato apparirà solo in un post.
Tutti gli utenti vedranno solo sei blocchi ma anche gli amministratori e gli editor vedranno il blocco shortcode disponibile solo per le pagine.

Nel nostro esempio, l’impatto su collaboratori e autori è nullo in quanto, di default, non possono aggiungere nuove pagine. Tuttavia, con un plugin per la gestione dei ruoli si possono controllare i permessi in modo più granulare.
Consentire l’accesso ai blocchi in base all’ID del post
Se si desidera consentire l’accesso ad una serie di blocchi solo per alcuni post, ecco come fare:
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 questo esempio, solo i blocchi paragrafo, titolo e immagine saranno disponibili per gli ID dei post 2 e 3.

Questo va bene per un piccolo gruppo di post. Ma in una situazione dinamica, in cui le pagine o i post vengono aggiunti in continuazione, è bene considerare la possibilità di filtrare le tassonomie e i campi personalizzati.
Negare l’inserimento nella lista dei blocchi
Consentire l’inserimento in lista è un modo implicito di negare l’inserimento in lista, in quanto i blocchi non disponibili vengono bloccati. Ma si può adottare l’approccio inverso se si preferisce consentire l’accesso alla maggior parte dei blocchi tranne alcuni. In questo esempio, i blocchi titolo e copertina non sono più disponibili per nessun utente.
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 sostanza, troviamo tutti i blocchi registrati e poi rimuoviamo i blocchi Intestazione e Copertina.
È bene fare attenzione se si pensa di poter eliminare qualsiasi blocco in questo modo. Se un blocco – core o di altro tipo – è registrato con JavaScript, bisognerà bloccarlo con JavaScript.
Negare l’inserimento nella lista di intere categorie di blocchi
Se è necessario rimuovere intere categorie di blocchi, come Widget, Embed o Tema, si può seguire questo approccio:
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;
}
Questo codice filtra intere categorie di blocchi, rendendo più semplice l’esperienza di editing nell’editor dei blocchi.

Bloccare i blocchi con la UI di WordPress
Bloccare un blocco impedisce che possa essere spostato o cancellato, pur consentendo la modifica dei contenuti. Ogni utente può bloccare o sbloccare un blocco in qualsiasi momento utilizzando l’opzione Blocca nella barra degli strumenti del blocco.
Si accede alle Impostazioni (i tre puntini ⋮) sul blocco, poi clic su Blocca e poi si seleziona l’opzione Blocca tutto per attivare automaticamente sia l’opzione Blocca lo spostamento che l’opzione Blocca la rimozione, ma queste opzioni possono essere applicate anche separatamente.

È importante sottolineare che, anche quando un blocco è bloccato, gli utenti possono comunque modificarne il contenuto e lo stile, a meno che non vengano applicate ulteriori restrizioni.
Impedire le modifiche allo stile non è possibile attraverso la funzione di blocco. Per limitare lo stile del blocco, è necessario apportare delle modifiche al file theme.json
.
Per i blocchi che contengono elementi annidati, c’è un’opzione aggiuntiva per bloccare solo il blocco parent o bloccare anche tutti i blocchi interni. In questo modo ci si assicura che gli elementi raggruppati rimangano strutturati pur consentendo modifiche controllate al loro interno.

Bloccare i blocchi con PHP
Sebbene l’interfaccia utente di WordPress fornisca un blocco di base, non applica restrizioni a livello di sito. Qualsiasi utente con accesso all’editor può sbloccare un blocco. Per limitare in modo permanente il blocco dei blocchi, la soluzione migliore è procedere via PHP.
Con PHP si può rimuovere completamente la possibilità di bloccare e sbloccare i blocchi, in modo che nessun utente possa aggirare le restrizioni. Questo è il modo in cui WordPress funzionava prima del rilascio di WordPress 5.9, quando è stata introdotta la funzionalità di blocco.
Il blocco dei blocchi è utile in molte situazioni, in particolare per la gestione di contenuti strutturati. Applicando le restrizioni dei blocchi con PHP, è possibile:
- Preservare l’integrità del design impedendo agli utenti di modificare i blocchi chiave.
- Prevenire le modifiche accidentali che potrebbero rovinare i layout.
- Rendere più semplice la creazione di contenuti riducendo le opzioni non necessarie.
- Garantire la coerenza in pattern e template, soprattutto per i progetti dei clienti.
Rimuovere la funzionalità di blocco dei blocchi per tutti gli utenti
Il seguente snippet PHP disabilita completamente il blocco dei blocchi, impedendo a qualsiasi utente di bloccarli o sbloccarli:
add_filter('block_editor_settings_all', 'example_disable_block_locking', 10, 2);
function example_disable_block_locking($settings, $context) {
$settings['canLockBlocks'] = false;
return $settings;
}
Con questo codice, la funzione di blocco dei blocchi viene completamente rimossa dall’editor dei blocchi. Gli utenti non vedranno le opzioni di blocco e nessuno, indipendentemente dal ruolo, potrà bloccare o sbloccare i blocchi.
Per gli utenti che hanno il proprio sito su Kinsta, è possibile modificare in sicurezza i file del tema grazie all’utilizzo di SFTP, che è abilitato di default per tutti i siti WordPress.
Limitare il blocco dei blocchi in base ai ruoli degli utenti
Invece di eliminare completamente la funzionalità di blocco, si potrebbero regolare i permessi in modo da stabilire in modo più preciso chi può bloccare e sbloccare i blocchi. Il seguente snippet PHP consente di modificare i blocchi solo agli amministratori e agli editor, mentre gli autori e i collaboratori non potranno sbloccare alcun blocco se questo è stato impostato da un amministratore o da un editor.
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;
}
Questo approccio limita il controllo dei blocchi agli utenti con le capacità di edit_theme_options
, in genere gli amministratori e gli editor. Gli autori e i collaboratori non potranno sbloccare i blocchi impostati dagli utenti di livello superiore.
Inoltre, l’accesso all’Editor di Codice è disabilitato. In questo modo si impedisce agli utenti di modificare manualmente il markup dei blocchi per aggirare le restrizioni. I blocchi bloccati rimarranno invariati, anche per gli utenti sviluppatori.
Riepilogo
La scelta di consentire o negare i blocchi – o una combinazione di entrambi – dipende dalle proprie specifiche esigenze. Si potrebbe voler limitare l’accesso ad alcuni blocchi per offrire un’esperienza di editing più pulita, imporre la coerenza del design o controllare l’accesso in base ai ruoli degli utenti.
A proposito di ruoli utente, le funzionalità possono essere modificate per personalizzare ulteriormente la gestione dei blocchi. Questo offre maggiori opportunità oltre a quelle che abbiamo trattato qui.
Si tenga presente che WordPress si evolve nel tempo. I futuri aggiornamenti potrebbero introdurre nuovi strumenti per gestire i blocchi o modificare le funzionalità esistenti, quindi è importante rimanere aggiornati sullo sviluppo di WordPress.
Stai cercando una soluzione di hosting sicura e adatta agli sviluppatori? Kinsta consente di gestire facilmente i file di WordPress, compresa la modifica dei file dei temi tramite SFTP, permettendo di personalizzare in modo semplice e sicuro il proprio sito senza metterne a rischio la stabilità.