403 ) ); } } /** * Termina la petición si no es administradora. * * @return void */ public static function exigir_administradora() { if ( ! self::es_administradora() ) { wp_die( esc_html__( 'Esta acción es solo para administradores del sitio.', 'validafirma' ), '', array( 'response' => 403 ) ); } } /** * Le da la capacidad al rol administrador, si no la tiene. * * @return void */ public static function asegurar_capacidad_de_administradores() { $rol = get_role( 'administrator' ); if ( $rol && ! $rol->has_cap( self::CAPACIDAD ) ) { $rol->add_cap( self::CAPACIDAD ); } } /** * Roles del sitio que se pueden marcar en Ajustes (todos menos administrador). * * @return array slug => nombre. */ public static function roles_editables() { $roles = array(); foreach ( wp_roles()->roles as $slug => $rol ) { if ( 'administrator' !== $slug ) { $roles[ $slug ] = translate_user_role( $rol['name'] ); } } return $roles; } /** * ¿El rol tiene la capacidad? * * @param string $slug Slug del rol. * @return bool */ public static function rol_tiene( $slug ) { $rol = get_role( $slug ); return $rol && $rol->has_cap( self::CAPACIDAD ); } /** * Da o quita la capacidad según la lista de roles marcados. * * @param string[] $marcados Slugs de roles con permiso. * @return void */ public static function aplicar_roles( array $marcados ) { foreach ( array_keys( self::roles_editables() ) as $slug ) { $rol = get_role( $slug ); if ( ! $rol ) { continue; } if ( in_array( $slug, $marcados, true ) ) { $rol->add_cap( self::CAPACIDAD ); } else { $rol->remove_cap( self::CAPACIDAD ); } } } }