Descubre en este tutorial cómo impedir que un usuario sin rol de administrador modifique los bloques que tú hayas bloqueado en WordPress.
Con la llegada del editor de bloques y el Full Site Editing (FSE) a WordPress una de las preocupaciones de diseñadores y desarrolladores es que el usuario final tiene «demasiado» control sobre el diseño y puede «cargarse» el trabajo del profesional.
Por eso, en WordPress 5.9 una de las características que llegó fue la posibilidad de bloquear los bloques. Gracias al atributo de lock
puedes controlar este bloqueo, concretamente con dos opciones:
remove
: controla si el bloque se puede eliminarse o no.move
: controla si el bloque se puede mover o no.
Cuando el ajuste de la opción es true
aplica el bloqueo.
Este sería el marcado HTML de un bloque de un párrafo en el que está bloqueado tanto la opción de moverlo como de eliminarlo:
<!-- wp:paragraph {"lock":{"move":true,"remove":true}} -->
<p>Heading two</p>
<!-- /wp:paragraph -->
Con la versión de WordPress 6.0 llegó la interfaz de usuario que permite hacer estos cambios de forma visual. La opción está en el menú del bloque:

Por defecto, todos los bloques se crean con las opciones de bloqueo desactivadas:

Y el usuario puede activarlas o desactivarlas haciendo clic en las opciones:

Los bloques que estén bloqueados mostrarán un icono de candado:

Tener una interfaz de usuario para poder bloquear bloques está muy bien, pero si todos los usuarios pueden modificarlo y desbloquearlos, deja te cumplir su principal cometido ¿no crees?
Por eso una opción muy interesante es bloquear esta interfaz para que solo esté accesible por rol de usuario. Por ejemplo, que solo los administradores tengan acceso.
De esta manera, te aseguras de que el cliente no elimina o mueve bloques que no debería.
Vamos a ver cómo puedes conseguirlo.
Mostrar la interfaz de bloqueo de bloques solo a los administradores de WordPress
Añade el siguiente snippet al fichero functions.php o a tu plugin de funcionalidades:
Para ver este código y los otros 1867 snippets de esta web,
identifícate o suscríbete aquí.
En este código utilizas el filtro block_editor_settings_all
en conjunción con la función current_user_can
para que solo se muestre la interfaz de bloqueo de bloques a los administradores.
Una vez aplicado, los usuarios que no sean administradores no verán la opción de bloquear, ni la de mover, ni la de eliminar:


Tampoco verán el candado en los bloques bloqueados, ni la opción de mover arriba o abajo el bloque:

Igual estás pensando, esto está genial para el 90% de mis clientes que solo usan la interfaz de usuario del editor. Pero hay otro 10% que sabría ir al editor de código y modificar lo que quieran.
Si es así, tienes que valorar si es mejor dejarles esa opción. Pero si crees que no deben tenerla puedes ocultar el editor de código del editor de bloques a usuarios no administradores.
Si quieres combinar ambas estrategias usa este snippet en lugar del anterior:
Para ver este código y los otros 1867 snippets de esta web,
identifícate o suscríbete aquí.
Con esto consigues ocultar tanto la interfaz de bloqueo de bloques como el editor de código. Esto es lo que verían usuarios no administradores:

Conclusión
Ahora ya sabes cómo bloquear algunos bloques e impedir que el cliente pueda modificarlos o eliminarlos por error.
Esto te permite que dar acceso al cliente para que pueda modificar el contenido pero sin perder la estructura que hayas creado.
¿Alguna pregunta o sugerencia para próximos snippets? Déjala en los comentarios.
Ventajas de ser suscriptor.