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

  1. 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.
  2. 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.
  3. 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'.
  4. 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 de manage_options, lo que generalmente está reservado para administradores.
  5. 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:

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:

  1. 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.
  2. 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.
  3. 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.

¡MANTENME INFORMADO!

¡Gracias por tu interés en estar informado del próximo lanzamiento de mis cursos! 😎

¡No hago spam! Lee la política de privacidad para tener más información.

Deja una respuesta

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

*

*

DARÍO BALBONTÍN FERNÁNDEZ es el Responsable del tratamiento de los datos personales del usuario y le informa que estos datos serán tratados de conformidad con lo dispuesto en el Reglamento (UE) 2016/679 de 27 de abril (GDPR) y la Ley Orgánica 3/2018 de 5 de diciembre (LOPDGDD), por lo que se le facilita la siguiente información del tratamiento: Fin del tratamiento: mantener una relación comercial y el envío de comunicaciones sobre nuestros productos y servicios. Criterios de conservación de los datos: se conservarán mientras exista un interés mutuo para mantener el fin del tratamiento y cuando ya no sea necesario para tal fin, se suprimirán con medidas de seguridad adecuadas para garantizar la seudonimización de los datos o la destrucción total de los mismos.Comunicación de los datos: No se comunicarán los datos a terceros, salvo obligación legal. Derechos que asisten al usuario: Derecho a retirar el consentimiento en cualquier momento. Derecho de acceso, rectificación, portabilidad y supresión de sus datos y a la limitación u oposición al su tratamiento. Derecho a presentar una reclamación ante la Autoridad de control (agpd.es) si considera que el tratamiento no se ajusta a la normativa vigente. Datos de contacto para ejercer sus derechos: contacto@dariobf.com.