Por seguridad WordPress Multisite desactiva la capacidad de incluir determinado código HTML para usuarios que no sean superadministradores (administradores de la red de sitios). Es una medida lógica para evitar que un usuario incluya código malicioso a través de la caja de contenido de un post. Sin embargo en redes de sitios controladas, con una comunidad de usuarios de confianza, puede tener sentido activar esta capacidad.
Lo que hace WordPress Multisite añadir los filtros KSES, que normalmente solo se aplican a colaboradores y autores, a los usuarios editores y administradores. También desactiva la capacidad unfiltered_html para editores y administradores.
El plugin Unfiltered MU elimina esta limitación. Aunque hace más de dos años que no se actualiza, estar desarrollado por Automattic, la empresa que está detrás del desarrollo de WordPress, es una garantía de calidad y seguridad. Además son unas 20 líneas de código, no más, lo cual limita la posibilidad de bugs y agujeros de seguridad. Es una buena opción.
Para quien prefiera prescindir de plugin se puede incluir la activación en el theme que se esté usando. El código a continuación realiza la tarea: es el mismo código del plugin pero asociado a los hooks de activación y desactivación de un theme.
El código utiliza el hook after_switch_theme para añadir la capacidad unfiltered_html a administradores y editores: las acciones asociadas a este hook se ejecutan justo después de activar el theme. Utiliza el hook switch_theme para eliminar la capacidad, ya que las acciones asociadas a este hook se ejecutan justo después de desactivar el theme. Así limitamos la funcionalidad a un theme, como medida de seguridad.
// unfilter admin and editor roles to allow them to include HTML tags in content when activating theme add_action( 'init', 'basurama_kses_init', 11 ); add_action( 'set_current_user', 'basurama_kses_init', 11 ); add_action( 'after_switch_theme', 'basurama_unfilter_roles', 10 ); // refilter admin and editor roles when deactivating theme add_action( 'switch_theme', 'basurama_refilter_roles', 10 ); // remove KSES filters for admins and editors function basurama_kses_init() { if ( current_user_can( 'edit_others_posts' ) ) kses_remove_filters(); } // add unfiltered_html capability for admins and editors function basurama_unfilter_roles() { // Makes sure $wp_roles is initialized get_role( 'administrator' ); global $wp_roles; // Dont use get_role() wrapper, it doesn't work as a one off. // (get_role does not properly return as reference) $wp_roles->role_objects['administrator']->add_cap( 'unfiltered_html' ); $wp_roles->role_objects['editor']->add_cap( 'unfiltered_html' ); } // remove unfiltered_html capability for admins and editors function basurama_refilter_roles() { get_role( 'administrator' ); global $wp_roles; // Could use the get_role() wrapper here since this function is never // called as a one off. It is always called to alter the role as // stored in the DB. $wp_roles->role_objects['administrator']->remove_cap( 'unfiltered_html' ); $wp_roles->role_objects['editor']->remove_cap( 'unfiltered_html' ); }