Gutenberg facilita la creación de contenido con bloques, pero a veces necesitas controlar qué bloques están disponibles. Puede que estés trabajando en el sitio de un cliente y quieras evitar que utilice ciertos bloques. O tal vez estés simplificando la experiencia de edición eliminando opciones innecesarias.
En esta guía, exploraremos diferentes formas de desactivar los bloques de Gutenberg, entre ellas:
- Usando la interfaz de usuario (IU) de WordPress para ocultar bloques en el insertador
- Bloqueando bloques para evitar que se muevan o eliminen
- Aplicando restricciones de bloques con PHP, incluido el acceso basado en roles
Dicho esto, no vamos a tratar la visibilidad de los bloques (mostrar/ocultar contenido en función de las condiciones) ni a desactivar ajustes específicos de los bloques, como el texto o los colores de fondo, que se gestionan en theme.json
. Sin embargo, sí hablaremos del bloqueo de bloques, ya que está estrechamente relacionado con la desactivación de los bloques.
Todos los métodos de esta guía funcionan sin plugins y se aplican a cualquier tema basado en bloques. ¡Empecemos!
Desactivar bloques con la interfaz de WordPress
Eliminar bloques innecesarios ayuda a agilizar la experiencia de edición y puede mejorar ligeramente el rendimiento del backend, ya que los bloques desactivados no se cargan en memoria.
Cualquier usuario puede desactivar bloques desde el menú Preferencias del editor de bloques. Para ello, haz clic en el menú de tres puntos Configuración (⋮) de la esquina superior derecha, que abre las preferencias del editor. A continuación, en la pestaña Bloques, los usuarios pueden desmarcar cualquier bloque para eliminarlo del insertador de bloques.
Por ejemplo, puedes desactivar el bloque Cita simplemente desmarcando su casilla, como se muestra a continuación.

Si quieres ir más allá, puedes desactivar toda una categoría de bloques. Por ejemplo, desmarcar la categoría Texto eliminará todos los bloques relacionados con el texto del insertador, asegurando que ya no estén disponibles para su uso. Esto puede ser útil para agilizar el editor y evitar que los usuarios accedan a bloques innecesarios.

Desactivar bloques con PHP
Existen dos enfoques fundamentales y muy distintos para permitir o impedir el uso de un bloque con WordPress. Dependiendo de tus necesidades, puedes elegir entre permitir o denegar que un bloque esté disponible en el Insertador.
Ambos enfoques pueden implementarse utilizando PHP o JavaScript, cada uno con sus propias ventajas e inconvenientes. PHP suele ser más sencillo cuando se trata de permitir bloques, mientras que JavaScript suele ser más eficaz cuando se trata de denegar bloques.
Utilizaremos PHP en todos nuestros ejemplos para demostrar varios casos de uso.
Lista de bloques permitidos
Para permitir sólo bloques específicos en el insertador, utiliza el siguiente filtro. Esto garantiza que sólo los bloques designados estén disponibles para todos los usuarios:
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'
);
}
Este código debe añadirse al archivo functions.php
de un tema hijo para evitar que los cambios se pierdan cuando se actualice el tema.
Cuando utilices este método, asegúrate de que se incluyen todos los bloques hijo necesarios. Por ejemplo, si permites el bloque core/list
, debes incluir también core/list-item
para evitar errores.

El filtro allowed_block_types_all
permite a los desarrolladores controlar los bloques disponibles en el insertador. Acepta dos parámetros:
$allowed_block_types
– Un array o booleano que define los bloques permitidos (por defecto: true).$block_editor_context
– Proporciona información sobre el estado actual del editor de bloques, incluida la entrada que se está editando.
Permitir bloques específicos para colaboradores y autores
El siguiente código restringe los bloques disponibles para los usuarios sin la capacidad publish_pages
(colaboradores y autores):
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;
}
En el ejemplo anterior, los Colaboradores y Autores sólo pueden utilizar los bloques de párrafo, encabezado, imagen, portada y lista.
Permitir bloques para tipos de entrada y usuarios específicos
El siguiente código añade el bloque Shortcode al insertador al editar una página, pero lo mantiene no disponible para otros tipos de entrada:
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;
}
Ten en cuenta que, dado que los colaboradores con rol de autor no pueden crear ni modificar páginas, el resultado aparecerá únicamente en una entrada.
Los usuarios solo verán seis bloques, pero los administradores y editores también verán el bloque shortcode disponible solo para una página.

En nuestro ejemplo, el impacto que esto tiene en los colaboradores y autores es nulo, ya que, por defecto, no pueden añadir nuevas páginas. Sin embargo, el uso de un plugin de Gestión de Roles podría alterar esa capacidad.
Permitir bloques basados en el ID de la entrada
Si hay casos en los que deseas permitir un conjunto de bloques solo para ciertas publicaciones, esto es lo que puedes hacer:
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;
}
En este ejemplo, sólo los bloques de párrafo, encabezado e imagen estarán disponibles para los ID de entrada 2 y 3.

Este método es adecuado si se trata de un pequeño conjunto de IDs de entradas. Pero si se trata de una situación dinámica en la que se añaden páginas o entradas continuamente, considera la posibilidad de filtrar por taxonomías y campos personalizados.
Bloques en la lista de denegados
La inclusión en la lista de permitidos, por implicación, es una forma de denegación, ya que se deniegan los bloques no disponibles. Pero puedes adoptar el enfoque inverso si prefieres permitir la mayoría de los bloques, con excepción de unos pocos. En este ejemplo, los bloques de encabezado y portada ya no están disponibles para ningún usuario.
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);
}
Básicamente, buscamos todos los bloques registrados y eliminamos los bloques de encabezamiento y portada.
Ten cuidado si crees que puedes desregistrar cualquier bloque con este método. Si un bloque — del core o de otro tipo — está registrado con JavaScript, debes anular su registro con JavaScript.
Eliminar categorías enteras de bloques
Si quieres eliminar categorías enteras de bloques, como Widgets, Embebidos o Bloques de temas, utiliza este método:
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;
}
Este enfoque filtra categorías enteras de bloques, simplificando la experiencia del editor de bloques.

Bloquear bloques con la interfaz de usuario de WordPress
Bloquear un bloque impide que se mueva o se elimine, a la vez que permite editar el contenido. Cualquier usuario puede bloquear o desbloquear un bloque en cualquier momento mediante la opción Bloquear de la barra de herramientas de bloques.
Para bloquear o desbloquear un bloque, haz clic en los tres puntos de Configuración (⋮) del bloque, haz clic en Bloquear y, a continuación, selecciona la opción Bloquear todo para activar automáticamente tanto Impedir movimiento como Impedir eliminación, pero estas opciones también se pueden aplicar por separado.

Es importante saber que, aunque un bloque esté bloqueado, los usuarios pueden modificar su contenido y estilo a menos que se apliquen otras restricciones.
Impedir los cambios de estilo no es posible únicamente mediante la función de bloqueo. Para restringir el estilo de los bloques, hay que hacer modificaciones en el archivo theme.json
.
Para los bloques que contienen elementos anidados, existe una opción adicional para bloquear sólo el bloque padre o bloquear también todos los bloques interiores. Esto garantiza que los elementos agrupados permanezcan estructurados, al tiempo que permite realizar ediciones controladas en su interior.

Bloquear bloques con PHP
Aunque la interfaz de usuario de WordPress proporciona un bloqueo básico de bloques, no impone restricciones en todo el sitio. Cualquier usuario con acceso de editor puede desbloquear un bloque, lo que facilita la anulación del contenido bloqueado. Para restringir permanentemente el bloqueo de bloques, PHP es la mejor solución.
Con PHP, puedes eliminar por completo la capacidad de bloquear y desbloquear bloques, asegurándote de que ningún usuario pueda eludir las restricciones. Antes del lanzamiento de WordPress 5.9, cuando se introdujo el bloqueo de bloques, WordPress funcionaba de esta manera.
El bloqueo de páginas es útil en muchos casos, sobre todo cuando se mantiene contenido estructurado. Al aplicar restricciones de bloques con PHP, puedes:
- Preservar la integridad del diseño impidiendo que los usuarios modifiquen bloques clave.
- Evitar ediciones accidentales que podrían romper el diseño.
- Agilizar la creación de contenidos reduciendo las opciones innecesarias.
- Garantizar la coherencia de patrones y plantillas, especialmente para proyectos de clientes.
Eliminar la funcionalidad de bloqueo de bloques para todos los usuarios
El siguiente fragmento de PHP desactiva por completo el bloqueo de bloques, impidiendo que cualquier usuario bloquee o desbloquee bloques:
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 esto aplicado, la función de bloqueo de bloques se elimina por completo del editor de bloques. Los usuarios no verán las opciones de bloqueo, y nadie, independientemente de su rol, podrá bloquear o desbloquear bloques.
Para los usuarios que alojen su sitio con Kinsta, realizar cambios en los archivos del tema es fácil y seguro utilizando SFTP, que está activado por defecto para todos los sitios de WordPress.
Restringir el bloqueo de bloques en función de los roles de usuario
En lugar de eliminar por completo el bloqueo de bloques, es posible que quieras restringir quién puede bloquear y desbloquear bloques. El siguiente fragmento de PHP permite que solo los administradores y editores modifiquen los bloqueos de bloques, mientras que los autores y colaboradores no pueden desbloquear ningún bloque establecido por un administrador o 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;
}
Este enfoque limita el control de los bloques a los usuarios con la capacidad edit_theme_options
, normalmente administradores y editores. Los autores y colaboradores no podrán desbloquear bloques establecidos por usuarios de nivel superior.
Además, el acceso al Editor de Código está desactivado, lo que impide que los usuarios modifiquen manualmente el marcado de los bloques para eludir las restricciones. Esto garantiza que los bloques bloqueados permanezcan inalterados, incluso por usuarios con conocimientos de programación.
Resumen
Elegir entre permitir o denegar bloques — o una combinación de ambos — depende de tus necesidades específicas. Puede que quieras restringir ciertos bloques para una experiencia de edición más limpia, reforzar la coherencia del diseño o controlar el acceso en función de los roles de los usuarios.
Hablando de roles de usuario, las capacidades se pueden modificar para personalizar aún más la forma en que se gestionan los bloques. Esto abre aún más posibilidades más allá de lo que hemos tratado aquí.
Ten en cuenta que WordPress evoluciona con el tiempo. Las futuras actualizaciones podrían introducir nuevas formas de gestionar los bloques o modificar la funcionalidad existente, por lo que mantenerse al día con el desarrollo de WordPress es importante para garantizar que tu enfoque siga siendo eficaz.
¿Buscas una solución de alojamiento segura y fácil de usar para los desarrolladores? Kinsta facilita la gestión de tus archivos de WordPress, incluida la edición de archivos de temas a través de SFTP, garantizando personalizaciones seguras y fluidas sin poner en riesgo la estabilidad del sitio.