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?
Índice de contenidos
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árrafocore/image
– Imagencore/heading
– Encabezadocore/gallery
– Galeríacore/list
– Listacore/quote
– Citacore/audio
– Audiocore/cover-image
– Fondocore/file
– Archivocore/video
– Vídeo
Bloques de diseño
core/button
– Botonescore/text-columns
– Columnascore/media-text
– Medios y textocore/more
– Texto «Más…»core/nextpage
— Salto de páginacore/separator
– Separadorcore/spacer
– Espaciador
Bloques de formato
core/table
– Tablacore/verse
– Versocore/code
– Códigocore/freeform
— Clásicocore/html
— HTML personalizadocore/preformatted
– Preformateadocore/pullquote
– Bloque de cita
Bloques de widgets/especiales
core/shortcode
– Shortcodecore/archives
– Widget de archivo del blogcore/categories
– Widget de lista de categoríascore/latest-comments
– Widget de últimos comentarioscore/latest-posts
– Widget de últimas entradascore/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.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
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?
Claro, así: https://ayudawp.com/widgets-clasicos/
Muy completo tu post, me ha servido mucho. Gracias!