¿Cómo agregar una Capacidad a un Rol de Usuario?

29 mar 2011, 20:31:17
Vistas: 47.6K
Votos: 19

Estoy administrando una red de WordPress y me gustaría agregar la capacidad unfiltered_html al rol de usuario predefinido de Administrador. En una instalación estándar de WordPress, la cuenta de Administrador ya tendría esta capacidad, pero en una instalación MU solo los Super Administradores tienen esta capacidad. Roles y Capacidades de WordPress.

¿Cómo puedo aumentar el rol de Administrador desde un tema o plugin?

4
Comentarios

http://wordpress.org/extend/plugins/unfiltered-mu/ parece que podría ayudar. Pero funciona para administradores y editores. Si eso no es lo deseado, tal vez el código podría ajustarse un poco.

Rev. Voodoo Rev. Voodoo
29 mar 2011 22:30:51

@Rev. Voodoo Gracias por la sugerencia. Esto ayudó a arrojar algo de luz sobre el tema, ya que agregar la capacidad de unfiltered_html no es suficiente para permitir que un rol que no sea Administrador o Super administrador pueda publicar embeds, etc. La clave fue desactivar/quitar los hooks de KSES de Wordpress: kses_remove_filters()

Jonnybojangles Jonnybojangles
6 abr 2011 02:44:09

Un blog detallado:http://goo.gl/xNuafH

Suresh Kamrushi Suresh Kamrushi
14 ene 2016 11:19:33
Todas las respuestas a la pregunta 2
5
21

Puedes usar la clase WP_Role,

// obtener el objeto de rol
$role_object = get_role( $role_name );

// agregar la capacidad $cap a este objeto de rol
$role_object->add_cap( $capability_name );

// eliminar la capacidad $cap de este objeto de rol
$role_object->remove_cap( $capability_name );

Para abordar tu pregunta original sobre cómo permitir que los Administradores ingresen etiquetas SCRIPT e IFRAME en el contenido de las publicaciones, necesitas la capacidad 'unfiltered_html', que en Multisite solo se otorga a los Super Administradores.

// obtener el objeto de rol
$admin_role = get_role( 'administrator' );
// otorgar la capacidad unfiltered_html
$admin_role->add_cap( 'unfiltered_html', true );

o puedes ejecutar esto una vez en tus funciones:

/* Roles y Capacidades */
add_role('professional', 'Usuario Profesional', array(
    'read' => true, // True permite esa capacidad, False específicamente la elimina.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //¡el último en el array no necesita coma!
));
30 mar 2011 08:39:58
Comentarios

Gracias Philip. En relación a la clase WP_Role, ¿cuándo debería ejecutarse el código? Supongo que esto afecta al objeto de rol global.

Me alegra que hayas mencionado el segundo bloque de código indicando que podría ejecutarlo una vez en mi archivo de funciones. He encontrado soluciones similares en algunos foros de soporte de WordPress, pero me parece extraño tener código que se ejecuta una sola vez en un tema o plugin. Especialmente sin una verificación de si el cambio ya existe. Tal vez la escritura del rol sea realmente insignificante. Para verificar la capacidad frente a simplemente escribir la capacidad en el rol como muestra tu primer ejemplo.

Jonnybojangles Jonnybojangles
30 mar 2011 19:01:07

También estoy interesado en cómo ejecutarías la clase WP_Role si tienes un momento libre para contarnos. Gracias

Osu Osu
30 mar 2011 21:49:00

@Jonnybojagles & @Osu, echen un vistazo a esto: Guía definitiva de Roles y Capacidades http://www.garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities/

Philip Philip
31 mar 2011 08:39:36

Ya había leído ese artículo en mi búsqueda, pero aproveché la oportunidad para repasarlo todo de nuevo, ¡gracias! Finalmente, después de analizar el plugin unfiltered-mu (mencionado anteriormente por Rev. Voodoo), descubrí que cambiar roles añadiendo capacidades no es suficiente. Necesitaba desactivar los filtros KSES de Wordpress.

Jonnybojangles Jonnybojangles
6 abr 2011 02:52:18

Prefiero añadir una coma al último elemento en los arrays. Aunque pueda parecer irrelevante ya que no es necesario para que el código funcione ni resulta en error(es), resulta útil cuando se usa control de versiones al visualizar modificaciones; no verías una línea antigua de un elemento del array eliminada, reañadida y resaltada como nueva con solo una coma como adición o cambio realizado en esa línea. Aunque pequeño, ayuda a ahorrar mucho tiempo al analizar modificaciones.

nyedidikeke nyedidikeke
31 may 2017 13:40:00
1

Para permitir que un rol diferente al Super Admin o Admin (dependiendo si la instalación de WordPress es una red/MU o no) pueda agregar HTML sin filtrar a una publicación o comentario, se debe eliminar el filtro KSES de WordPress.

Verificar si un usuario tiene una capacidad particular.

if ( current_user_can( 'unfiltered_html' ) ) { … }

Si es así, entonces eliminar KSES

kses_remove_filters();

Esta funcionalidad ya está integrada en unfiltered-mu, permitiendo que administradores y editores puedan agregar HTML sin filtrar.

6 abr 2011 21:17:14
Comentarios

La funcionalidad también está envuelta en un registro y anulación de registro de plugin para que la lógica no tenga que ejecutarse en cada instancia de WP.

Jonnybojangles Jonnybojangles
12 abr 2011 21:30:27