Qué es una capacidad de WordPress

El concepto de capacidad es el «corazón» de la gestión de accesos de WordPress ya que define literalmente lo que el usuario puede o no puede hacer. La documentación oficial de WordPress describe la capacidad como el permiso para realizar uno o más tipos de tareas y cada usuario autenticado puede tener al menos una capacidad, ya sea asignada directamente o heredada de un rol(s) padre.

La lista de todas las capacidades estándar para el núcleo de WordPress se puede encontrar en el artículo Roles y capacidades.

Aunque la mayoría de las capacidades se explican por sí mismas en base a su nombre (edit_posts, manage_options, remove_users, etc.), todavía hay mucha confusión asociada con lo que realmente son responsables y por qué incluso cuando el usuario tiene una determinada capacidad asignada, todavía no se le permite realizar tareas anticipadas.

No hay una buena respuesta a esta pregunta ya que muchas de las capacidades del núcleo de WordPress tienen excepciones. Por ejemplo, cuando el sitio web es una configuración multisitio y el usuario no es un superadministrador, entonces incluso si la capacidad create_users se concede, el usuario todavía no será capaz de crear un nuevo usuario; o la capacidad manage_links será ignorada si la opción link_manager_enabled está desactivada.

En base a la versión de WordPress 4.9 hay al menos 65 excepciones definidas en el núcleo por lo que no dudes en contactar conmigo si tienes dificultades con la gestión de capacidades.

Todas las capacidades basadas en roles se almacenan en la tabla wp_options con nombre de opción wp_user_roles mientras que las capacidades basadas en usuarios se almacenan en la tabla wp_usermeta con nombre de meta clave wp_capabilities. El prefijo wp_ puede variar en función del valor de la variable global $table_prefix definida en el archivo wp-config.php.

La lista de capacidades es el array asociado donde la clave del elemento es la capacidad en sí misma mientras que el valor del elemento es la regla que define si la capacidad es concedida o denegada (1 significa que la capacidad es concedida mientras que 0 – denegada).

Lista de capacidades de WordPress

WordPress tiene la función central current_user_can que se utiliza para comprobar si el usuario actualmente conectado tiene cierta capacidad, sin embargo la función activa una funcionalidad bastante compleja que en algunos casos puede devolver un resultado inesperado. Todo depende de cuántos plugins o temas activos se enganchen a la función current_user_can.

Como se mencionó anteriormente, algunas capacidades tienen excepciones que se definen programáticamente en la función map_meta_cap. Además, cualquier solución de terceros puede engancharse al proceso con el filtro user_has_cap y sobrescribir el resultado.

La capacidad se considera concedida si la regla contiene un valor no vacío.

¡Tenga en cuenta! Desde 2011 he experimentado personalmente sólo unos pocos casos fueron otros plugins incorrectamente enganchado en la función current_user_can. Así que si algo no está funcionando como se esperaba es menos probable que se relacione con cualquier plugin o temas, sino más bien la fuga de conocimiento en las excepciones de la capacidad.

¿Cómo funciona realmente la capacidad?

La capacidad en sí misma es inútil, a menos que, se hace referencia en el código. Técnicamente significa que para que una capacidad funcione, en algún lugar del código, debe haber una comprobación programática si el usuario autenticado tiene una capacidad específica o no. Esto depende de un desarrollador para definir qué parte del sitio web (de la funcionalidad) está protegida con qué capacidad.

¡Nota! No todo en el WordPress tiene una capacidad asociada. Por ejemplo no encontrarás una capacidad que se encargue de mostrar u ocultar la búsqueda de posts encima de la lista de posts en el Backend o incluso capacidad que restrinja el acceso al backend.

Para aprender a restringir el acceso a toda la zona del backend para los usuarios autentificados, consulta el artículo Cómo bloquear el backend de WordPress.

Afortunadamente se puede lograr mucha personalización con los hooks nativos de WordPress pero esto requiere un desarrollo personalizado. Para más información sobre los hooks de WordPress consulta el artículo Qué es el hook de WordPress.

¿Puedes crear una capacidad personalizada?

Varios plugins o temas añaden capacidades personalizadas al núcleo de WordPress ya sea almacenándolas en la base de datos o registrándolas dinámicamente durante la carga del sitio web. Es difícil saber qué forma es la correcta, sin embargo es mucho más difícil gestionar el acceso a un sitio web con capacidades añadidas dinámicamente porque sólo cierto plugin o tema las conoce y controla cuándo se registran.

Las capacidades añadidas dinámicamente suelen registrarse con el hook init modificando la propiedad pública get_current_user()->allcaps.

Con el plugin AAM tienes todo el conjunto de herramientas necesarias para gestionar el acceso a las capacidades del sitio web de WordPress para roles o incluso usuarios individuales. Para más información sobre esto, consulta el artículo Cómo gestionar las capacidades de WordPress.

Conclusión

Las capacidades de WordPress definen lo que los usuarios pueden o no pueden hacer dentro del sitio web. Normalmente se diseñan más para las tareas del Backend y rara vez se utilizan para cualquier característica del Frontend.

La capacidad en sí misma es inútil a menos que esté soportada en el código. Así que si usted no está familiarizado con la codificación PHP, por favor consulte con su desarrollador o simplemente póngase en contacto conmigo antes de considerar la creación de cualquier capacidad personalizada.