Limitar la creación de nuevos términos de taxonomía por rol de usuario en WordPress
La gestión de contenido en WordPress es extremadamente flexible, y una de las razones de su popularidad es su capacidad para ser personalizada según las necesidades del proyecto. Uno de los elementos clave en esta flexibilidad es el uso de taxonomías, las cuales permiten clasificar el contenido de forma personalizada, además de las taxonomías predeterminadas como «categorías» y «etiquetas».
Sin embargo, en muchos proyectos, es posible que queramos restringir quién puede modificar o añadir términos a ciertas taxonomías. Es común que al gestionar un sitio con varios roles de usuario, como administradores, editores, autores, colaboradores y suscriptores, tengamos que limitar ciertos permisos según las necesidades del sitio. En este caso específico, puede surgir la necesidad de evitar que ciertos usuarios, como los autores o colaboradores, creen nuevos términos dentro de una taxonomía específica.
¿Por qué limitar la creación de nuevos términos de taxonomía?
Si bien WordPress facilita la creación de contenido mediante el uso de categorías y etiquetas, en algunos casos, la creación indiscriminada de nuevos términos puede resultar en un problema. Un ejemplo común es cuando diferentes usuarios empiezan a crear etiquetas duplicadas, incorrectamente nombradas o innecesarias, lo que termina desorganizando el sitio.
Por ejemplo, si trabajas en un sitio web con una estructura de contenido muy clara y definida, como un periódico digital, podrías querer mantener un control más estricto sobre las categorías y etiquetas para evitar que los autores creen términos que rompan la coherencia del contenido.
Aquí es donde entra en juego el snippet que veremos a continuación, el cual te permitirá limitar quién puede o no añadir nuevos términos de taxonomía según su rol de usuario.
Controlar la creación de términos por roles de usuario
El siguiente código es un ejemplo sencillo que utiliza el hook pre_insert_term
de WordPress para bloquear la creación de nuevos términos en una taxonomía específica, dependiendo del rol del usuario.
add_action( 'pre_insert_term', function ( $term, $taxonomy )
{
return ( 'tu_taxonomia' === $taxonomy && !current_user_can( 'manage_options' ) )
? new WP_Error( 'term_addition_blocked', __( 'No puedes añadir términos a esta taxonomía.' ) )
: $term;
}, 0, 2 );
Lenguaje del código: PHP (php)
Explicación del código
- Hook pre_insert_term: Este hook se dispara justo antes de que un término sea insertado en la base de datos, lo que nos permite interceptar el proceso y realizar nuestras comprobaciones.
- Función anónima: La función anónima dentro del hook evalúa dos cosas: la taxonomía en la que se está intentando añadir el término y el rol del usuario que está realizando la acción. Si ambas condiciones coinciden, entonces bloquea la inserción del término.
- Condición de taxonomía: La primera parte de la condición
('tu_taxonomia' === $taxonomy)
verifica si la taxonomía en cuestión es la que deseamos restringir. Debes reemplazar'tu_taxonomia'
con el slug de la taxonomía que quieres controlar. Por ejemplo, si deseas restringir las etiquetas (tags), utilizarías'post_tag'
. - Comprobación del rol de usuario: La segunda parte,
!current_user_can( 'manage_options' )
, se asegura de que sólo los usuarios con ciertos privilegios puedan añadir nuevos términos. En este caso, está comprobando si el usuario tiene la capacidad demanage_options
, lo que generalmente está reservado para administradores. - Bloqueo de la inserción: Si ambas condiciones se cumplen, la función devuelve un error de WordPress (
WP_Error
), lo que bloquea la inserción del nuevo término y muestra un mensaje de error personalizado: «No puedes añadir términos a esta taxonomía.»
Personalizar el código
Este script es muy flexible, ya que puedes adaptarlo según tus necesidades. A continuación, algunas maneras de personalizarlo:
- Modificar la taxonomía: Puedes reemplazar
'tu_taxonomia'
por cualquier slug de taxonomía personalizada o por las taxonomías predeterminadas como'category'
o'post_tag'
. Si estás trabajando con una taxonomía personalizada, asegúrate de utilizar el slug correcto que hayas definido en tu código o que te haya proporcionado el tema o plugin correspondiente. - Modificar el rol de usuario: La función
current_user_can
acepta diferentes capacidades de usuario. En este ejemplo, está configurado para que solo los usuarios con la capacidadmanage_options
(generalmente administradores) puedan añadir términos. Si deseas permitir que otros roles también puedan hacerlo, puedes cambiar la capacidad. Por ejemplo:edit_posts
: Permite a autores y editores.edit_others_posts
: Solo permite a editores.publish_posts
: Permite a los usuarios que pueden publicar, como autores y editores.
user_can
para verificar qué roles tienen determinadas capacidades.
Casos prácticos de uso
Existen diversos escenarios en los que limitar la creación de términos por rol de usuario puede ser útil:
- Revistas o sitios de noticias: En un entorno con varios autores, podrías querer que solo los editores o administradores tengan el control sobre las categorías y etiquetas para mantener una organización coherente.
- Tiendas en línea: Si tienes un sitio de comercio electrónico con productos clasificados en varias categorías y etiquetas personalizadas, es posible que desees que solo los administradores o gestores de tienda puedan añadir nuevos términos. Esto ayuda a evitar la creación de términos incorrectos o duplicados.
- Portafolios de agencias: Si tu sitio utiliza taxonomías personalizadas para clasificar trabajos o proyectos, podrías querer que solo ciertos roles tengan el poder de modificar las categorías, evitando que usuarios con menos privilegios rompan la estructura organizada de tu portafolio.
Seguridad y control del sitio
Además de mantener la organización, implementar este tipo de restricciones es también una práctica recomendada en términos de seguridad y control. Aunque la capacidad de añadir nuevos términos de taxonomía pueda parecer una acción menor, cuando hay muchos usuarios creando y gestionando contenido, este tipo de limitaciones ayuda a evitar errores involuntarios y posibles vulnerabilidades.
En muchos casos, otorgar permisos indiscriminadamente a usuarios sin experiencia o con menos responsabilidad dentro del sitio puede dar lugar a problemas. Limitar la creación de términos a roles específicos garantiza que solo personas con el conocimiento y la autoridad adecuada puedan modificar ciertos aspectos clave del sitio.
Mejoras adicionales
Si bien este snippet es funcional, podrías querer añadir un sistema más robusto para gestionar estas restricciones. Por ejemplo, podrías crear una página dentro del área de administración de WordPress que permita a los administradores controlar quién puede añadir términos a qué taxonomías sin necesidad de editar el código. Esto podría lograrse utilizando las capacidades de roles y permisos nativos de WordPress junto con algún plugin de gestión de usuarios como «User Role Editor», que facilita la asignación de permisos a los diferentes roles.
Conclusión
Limitar la creación de nuevos términos de taxonomía en WordPress por rol de usuario es una práctica muy útil para mantener la coherencia y el control sobre el contenido del sitio. Con este simple snippet, puedes asegurarte de que solo los usuarios con las capacidades adecuadas tengan el poder de modificar ciertas taxonomías, evitando así la creación innecesaria de términos y manteniendo el sitio organizado y fácil de navegar.