¿Cómo agregar una capacidad a un rol de usuario?

14

Estoy administrando una red de Wordpress y me gustaría agregar la capacidad de usuario unfiltered_html a la función de administrador ya predefinida. En una instalación estándar de Wordpress, la cuenta de administrador ya tendría esta capacidad, pero en una instalación de MU solo los Superadministradores tienen esta capacidad. Roles y capacidades de Wordpress .

¿Cómo puedo aumentar la función de administrador desde un tema o complemento?

Jonnybojangles
fuente
1
Wordpress.org/extend/plugins/unfiltered-mu parece que puede ayudar. Pero funciona para administradores y editores. Si eso no se desea, ¿tal vez se pueda modificar un poco el código?
Rev. Voodoo
@Rvdo. Voodoo Gracias por la sugerencia. Esto ayudó a arrojar algo de luz sobre el tema como la adición de la capacidad de unfiltered_html no es suficiente para permitir un papel más que el administrador o Super administrador la capacidad de colocar objetos embebidos, etc. La clave fue filtrado ONU / enganchando KSES Wordpress': kses_remove_filters ()
Jonnybojangles
Un blog detallado: goo.gl/xNuafH
Suresh Kamrushi el

Respuestas:

14

Puedes usar la clase WP_Role ,

// get the the role object
$role_object = get_role( $role_name );

// add $cap capability to this role object
$role_object->add_cap( $capability_name );

// remove $cap capability from this role object
$role_object->remove_cap( $capability_name );

Entonces, para abordar su pregunta original sobre cómo habilitar a los administradores para que ingresen las etiquetas SCRIPT e IFRAME en el contenido de la publicación, está buscando la capacidad 'unfiltered_html', que en Multisite solo se otorga a los Superadministradores.

// get the the role object
$admin_role = get_role( 'administrator' );
// grant the unfiltered_html capability
$admin_role->add_cap( 'unfiltered_html', true );

o puede ejecutar esto una vez en sus funciones:

/* Roles & Capabilities */
add_role('professional', 'Professional User', array(
    'read' => true, // True allows that capability, False specifically removes it.
    'edit_posts' => true,
    'delete_posts' => true,
    //'edit_published_posts' => true,
    //'publish_posts' => true,
    //'edit_files' => true,
    'upload_files' => true //last in array needs no comma!
));
Philip
fuente
Gracias Philip. En cuanto a la clase WP_Role, ¿cuándo se debe ejecutar el código? ¿Supongo que esto afecta el objeto de rol global? Me alegra que haya mencionado el segundo bloque de código mencionando que podría ejecutar esto una vez en mi archivo de funciones. He encontrado soluciones similares en algunos de los foros de soporte de Wordpress, pero me parece extraño haber ejecutado una vez el código en un tema o complemento. Especialmente sin verificar si el cambio ya existe. Quizás la escritura de roles sea realmente insignificante. Para verificar la capacidad frente a simplemente escriba la capacidad en el rol como lo muestra su primer ejemplo.
Jonnybojangles
También estoy interesado en cómo ejecutarías la clase WP_Role si tienes un momento libre para contarnos. Gracias
Osu
1
@Jonnybojagles & @Osu, mira esto: Guía Definitiva para Roles y Capacidades garyc40.com/2010/04/ultimate-guide-to-roles-and-capabilities
Philip
Ya he leído ese artículo en mi búsqueda, pero aproveché la oportunidad para volver a leerlo todo, ¡gracias! Finalmente, después de diseccionar el complemento no filtrado-mu (mencionado anteriormente por el Rev. Voodoo), descubrí que cambiar los roles al agregar capacidades no es suficiente. Necesitaba desfiltrar los filtros KSES de Wordpress.
Jonnybojangles
Prefiero agregar una coma al último elemento en las matrices. Si bien puede parecer irrelevante, ya que no es necesario hacer que el código funcione ni generar errores, es útil cuando se utiliza un control de versión al visualizar modificaciones; no vería una línea antigua de elemento de matriz eliminada, agregada nuevamente y resaltada como nueva con solo una coma como adición o cambio realizado para esa línea. Aunque es poco, ayuda a ahorrar mucho tiempo al analizar modificaciones.
nyedidikeke
2

Para permitir que otra función que no sea Super Admin o Admin (dependiendo de si la instalación de Wordpress sea una instancia de red / MU o no) agregue html sin filtrar a una publicación o comentario, se debe eliminar el filtro KSES de Wordpress.

Compruebe si un usuario tiene una capacidad particular.

if ( current_user_can( 'unfiltered_html' ) ) {  }

Si es así, elimine KSES

kses_remove_filters();

Esta funcionalidad ya está envuelta en unfiltered-mu, lo que permite a los administradores y editores agregar html sin filtrar.

Jonnybojangles
fuente
La funcionalidad también se incluye en un registro de plugin y se anula el registro para que no sea necesario realizar la lógica en cada instancia de WP.
Jonnybojangles