Cómo quitar bloques del editor según el tipo de contenido o perfil de usuario

Cuando expliqué cómo hacer que el editor de bloques estuviese solo disponible para algunos tipos de contenido, páginas por ejemplo, rápidamente me surgió otra duda.

Porque claro, en algún momento habrá que abandonar el editor clásico también para las entradas, bien porque no quede más remedio que aprovechar las ventajas – cuando sean reales – del editor de bloques para redactar textos, bien porque simplemente deje de ser compatible WordPress.

¿Cómo manejaré el problema de que los redactores de entradas no usen bloques que sean para diseñar o maquetar?

Quitar bloques disponibles según el tipo de contenido

Una de las soluciones posibles está en permitir solo ciertos bloques del editor para según qué tipo de contenido, y yo siempre pienso en las entradas, pero puede aplicarse a cualquier otro tipo de contenido, también personalizados (CPT).

Aquí está la magia:

/* Permitir solo ciertos bloques en entradas */
function ayudawp_bloques_permitidos_por_contenido($allowed_block_types, $post) {
if ($post->post_type == 'post') {
return array(
'core/paragraph',
'core/heading',
'core/image'
);
}
else {
return $allowed_block_types;
}
}
add_filter('allowed_block_types', 'ayudawp_bloques_permitidos_por_contenido', 10, 2);

En este código permitimos que en el editor de entradas cargue el editor de bloques, sí, pero solo con 3 bloques, el de párrafo, el de encabezados y el de imágenes, que suelen ser los que habitualmente usan los redactores de contenidos, aunque puedes añadir más (mira la lista de más abajo).

Si tienes que restringir bloques en otros tipos de contenido sería como en el siguiente ejemplo, en el que, además de la restricción en las entradas anterior, en el tipo de contenido project solo se puedan usar los bloques de lista y tabla: 

/* Permitir solo ciertos bloques en entradas */
function ayudawp_bloques_permitidos_por_contenido($allowed_block_types, $post) {
if ($post->post_type == 'post') {
return array(
'core/paragraph',
'core/heading',
'core/image'
);
}
elseif ($post->post_type == 'project') {
return array(
'core/list',
'core/table'
);
}
else {
return $allowed_block_types;
}
}
add_filter('allowed_block_types', 'ayudawp_bloques_permitidos_por_contenido', 10, 2);

Nota: Los códigos anteriores puedes añadirlos tanto al archivo functions.php del tema activo como a tu propio plugin de personalizaciones. Si tienes alguna duda revisa esta guía de cómo y dónde pegar códigos.

Si quieres añadir más bloques disponibles aquí tienes una lista de los bloques nativos de WordPress más habituales (no están todos):

Slugs de los bloques nativos de WordPress

Bloques comunes

  • core/paragraph – Párrafo
  • core/image – Imagen
  • core/heading – Encabezado
  • core/gallery – Galería
  • core/list– Lista
  • core/quote – Cita
  • core/audio– Audio
  • core/cover-image– Fondo
  • core/file– Archivo
  • core/video– Vídeo

Bloques de diseño

  • core/button – Botones
  • core/text-columns – Columnas
  • core/media-text – Medios y texto
  • core/more – Texto «Más…»
  • core/nextpage — Salto de página
  • core/separator – Separador
  • core/spacer – Espaciador

Bloques de formato

  • core/table – Tabla
  • core/verse – Verso
  • core/code – Código
  • core/freeform — Clásico
  • core/html — HTML personalizado
  • core/preformatted – Preformateado
  • core/pullquote– Bloque de cita

Bloques de widgets/especiales

  • core/shortcode – Shortcode
  • core/archives– Widget de archivo del blog
  • core/categories – Widget de lista de categorías
  • core/latest-comments – Widget de últimos comentarios
  • core/latest-posts– Widget de últimas entradas
  • core/query-post– Listado de contenidos

Bloques de incrustados

  • core/embed – Cualquier contenido incrustado

Quitar bloques disponibles según el perfil de usuario

La otra posible solución es controlar a qué bloques tiene acceso cada perfil de usuario, desactivando el resto, salvo para el administrador y editor.

El código sería como este:

/* Controlar bloques por perfil de usuario */
add_filter( 'allowed_block_types', 'ayudawp_bloques_por_usuario', 10, 2 );
function ayudawp_bloques_por_usuario( $allowed_blocks, $post ) {
$user = wp_get_current_user();
// Todos los bloques disponibles si el usuario es administrador
if ( in_array('administrator', $user->roles ) ) {
return $allowed_blocks;
}
// Todos los bloques disponibles si el usuario es editor
if ( in_array('editor', $user->roles ) ) {
return $allowed_blocks;
}
// Bloques permitidos si el usuario es autor
if ( in_array('author', $user->roles ) ) {
$allowed_blocks = array(
'core/image',
'core/paragraph',
'core/heading',
'core/list',
'core/cite',
'core/shortcode'
); 
return $allowed_blocks;
}
// Bloques permitidos si el usuario es colaborador
if ( in_array('contributor', $user->roles ) ) {
$allowed_blocks = array(
'core/paragraph',
'core/heading',
'core/list',
'core/cite'
); 
return $allowed_blocks;
}
return $allowed_blocks;
}

En el código anterior hemos definido así los bloques disponibles para cada perfil de usuario:

  • Administrador – Acceso a todos los bloques.
  • Editor – Acceso a todos los bloques.
  • Autor – Solo disponibles los bloques de imagen, párrafo, encabezado, lista y cita.
  • Colaborador – Solo disponibles los bloques de párrafo, encabezado, lista y cita.

¿Funciona?

Pues claro. Sea cual sea el método elegido controlarás totalmente qué bloques están disponibles en el editor según tipo de contenido o el perfil de usuario.

¡Chulo, eh!

¿No se puede hacer con plugins?

Pues sí, se puede hacer con algún plugin. Por ejemplo, Advanced Blocks, permite crear y editar perfiles, especificando a qué bloques, nativos o propios, tendrá acceso cada perfil de usuario.

(4 votos, promedio: 5) Valora este artículo para ayudar a mejorar la calidad del blog

¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!

Sobre el autor

3 comentarios en “Cómo quitar bloques del editor según el tipo de contenido o perfil de usuario”

  1. La cosa es que odio mucho como wp ha cambiado la forma de configurar los widgets, mi pregunta es, hay alguna forma de regresar al estilo anterior?

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información base sobre privacidad:
  • Responsable: Fernando Tellado ([email protected])
  • Fin del tratamiento: Moderación de comentarios para evitar spam
  • Legitimación: Tu consentimiento
  • Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal
  • Derechos: Acceso, rectificación, portabilidad, olvido

 

Ir arriba Ir al contenido