Descubre en este tutorial cómo impedir que un usuario modifique los bloques que tú hayas bloqueado en un tipo de entrada de WordPress.
Con la llegada del editor de bloques y del sitio (Site Editing) a WordPress, una de las preocupaciones de diseñadores y desarrolladores es que el usuario final tenga «demasiado» control sobre el diseño y pueda «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 eliminar 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 de cumplir su principal cometido, ¿no crees?
En un tutorial anterior te expliqué cómo puedes bloquear esta interfaz para que solo esté accesible por rol de usuario para que, por ejemplo, que solo los administradores tengan acceso.
En este te voy a explicar cómo hacerlo para un determinado tipo de entrada (post, páginas, entradas de un CPT…). 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.
Ocultar la interfaz de bloqueo de bloques en un tipo de entrada determinado
Añade el siguiente snippet al fichero functions.php o a tu plugin de funcionalidades:
Para ver este código y los otros 2055 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 no se muestre la interfaz de bloqueo de bloques en páginas.
Una vez aplicado, los usuarios cuando vayan a editar una página 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:
Si lo quieres aplicarlo a otro tipo de entrada solo tienes que modificar el código. Por, ejemplo, este sería el snippet que tendrías que usar si quisieras limitarlo en las entradas del CPT de cursos:
Para ver este código y los otros 2055 snippets de esta web,
identifícate o suscríbete aquí.
Conclusión
Ahora ya sabes cómo bloquear algunos bloques de un determinado tipo de entrada (post, páginas, entradas de un CPT…) 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.