¿Has desinstalado plugins de tu WordPress y te has dado cuenta de que siguen apareciendo perfiles o roles de usuario – como sea que los llames – que ya no utilizas? Es más común de lo que piensas.
Por qué se acumulan perfiles innecesarios
Los plugins que añaden funcionalidades complejas a WordPress suelen crear perfiles de usuario personalizados para gestionar permisos específicos necesarios para su uso, y hasta ahí bien.
El problema es que muchos de estos plugins no eliminan automáticamente estos roles cuando los desinstalas y estos perfiles se quedan ahí campando a sus anchas en tu base de datos.
Algunos de los culpables más habituales son:
Plugins de eCommerce:
- WooCommerce crea perfiles como
shop_manager(gestor de tienda) ycustomer(cliente). - Easy Digital Downloads añade sus propios perfiles de gestión.
Plugins LMS (plataformas de aprendizaje):
- LearnDash genera perfiles como
group_leader(líder de grupo). - SenseiLMS crea
instructor,studenty otros perfiles específicos.
Plugins de membresías:
- MemberPress y Paid Memberships Pro crean perfiles personalizados para cada nivel de membresía.
- Restrict Content Pro genera sus propios perfiles de suscriptor.
Otros plugins especializados:
- Algunos plugins SEO (casi todos) crean perfiles de
seo_managery similares. - Plugins de directorios, reservas, eventos… cada uno con sus perfiles propios
Cuándo tiene sentido eliminar perfiles
Antes de lanzarte a borrar perfiles, piensa si realmente necesitas hacerlo:
Deberías eliminarlos cuando:
- Has desinstalado definitivamente un plugin y no vas a volver a usarlo.
- Quieres optimizar tu base de datos y reducir el desorden.
- Necesitas claridad en la gestión de usuarios de tu WordPress.
- Estás haciendo limpieza general de tu instalación.
Mejor déjalos si:
- Piensas volver a usar ese plugin en el futuro.
- Tienes usuarios asignados a esos perfiles (primero reasígnalos).
- No estás seguro de qué plugin creó ese perfil.
Advertencia importante antes de empezar
Antes de eliminar cualquier perfil, asegúrate de que ningún usuario está asignado a él. Si borras un perfil con usuarios asignados, pueden perder el acceso a tu WordPress o quedarse sin permisos.
Para comprobar usuarios por perfil:
- Ve a «Usuarios > Todos los usuarios».
- Filtra por el perfil que quieres eliminar.
- Si hay usuarios, reasígnalos a otro perfil apropiado antes de continuar.
Ahora sí, vamos con las soluciones.
Método 1: Plugin «User Role Editor» (el más completo)
User Role Editor es el plugin más popular para gestionar perfiles y capacidades en WordPress. Además de eliminar perfiles, te permite editarlos y crear nuevos.
Pasos:
- Instala y activa el plugin «User Role Editor» desde el repositorio oficial o el instalador de WordPress.
- Ve a Usuarios > User Role Editor.
- Haz clic en el botón Eliminar perfil a la derecha de la pantalla.
- En el desplegable de la ventana emergente, selecciona el perfil que quieres eliminar.
- Pulsa el botón de eliminar para confirmar la acción.
Ventajas:
- Interfaz visual clara.
- Muy completo, también sirve para editar y crear perfiles y capacidades.
- Mantenido activamente y compatible con las últimas versiones de WordPress.
Inconvenientes:
- Quizá demasiado completo si solo quieres borrar perfiles puntualmente.
Método 2: Plugin «Eliminador sencillo de perfiles» (el más ligero y directo)
Si buscas algo más específico y ligero, he creado un plugin sencillo de usar y tirar especialmente para esta tarea.
Características:
- Un solo archivo PHP.
- Muestra solo los perfiles personalizados (protege los nativos de WordPress).
- Incluye botón para desactivarse a sí mismo cuando termines.
- Sin configuraciones complicadas.
Cómo usarlo:
- Descarga en este enlace el plugin Eliminador sencillo de perfiles.
- Instala el plugin como cualquier otro, con la opción de subir del instalador de plugins de WordPress.
- Actívalo.
- Ve a Usuarios > Eliminar perfiles.
- Elimina los perfiles que no necesites.
- Desactiva el plugin con el botón de la misma página.
- Si ya no lo necesitas puedes borrar el plugin hasta la próxima.
Perfecto para limpiezas puntuales sin complicarte la vida.
Método 3: Snippet de código (para desarrolladores)
Si te manejas con código, puedes añadir este snippet al functions.php de tu tema hijo o usando un plugin de snippets, lo que prefieras:
/* Eliminación de roles de usuario innecesarios - AyudaWP.com */
function eliminar_roles_personalizados() {
// Solo ejecutar una vez
if (get_option('roles_eliminados')) {
return;
}
$roles_a_eliminar = array(
'shop_manager',
'instructor',
'customer',
'seo_manager',
// Añade o quita roles siguiendo la pauta
);
foreach ($roles_a_eliminar as $rol) {
if (get_role($rol)) {
remove_role($rol);
}
}
// No se sigue ejecutando
update_option('roles_eliminados', true);
}
add_action('init', 'eliminar_roles_personalizados');
Este código se ejecuta una sola vez automáticamente. Después puedes dejarlo o eliminarlo, ya habrá hecho su trabajo.
Método 4 (avanzado): Eliminación directa en la base de datos
Para usuarios avanzados o desarrolladores que quieran entender cómo funciona WordPress por debajo, aquí van los métodos más técnicos.
¿Dónde se almacenan los perfiles de usuario de WordPress?
Los perfiles de usuario en WordPress se guardan en la tabla wp_options (puede tener otro prefijo según tu instalación), concretamente en una opción llamada wp_user_roles. El valor está serializado en formato PHP.
¿En serio?, ¿con lo fácil que es con los otros métodos quieres animarte a romper algo?. A mandar, por mi no quedará, y eso sí, aprenderás algo seguro.
Borrar perfiles manualmente desde phpMyAdmin
Pasos:
- Accede a phpMyAdmin desde tu hosting.
- Selecciona tu base de datos de WordPress.
- Busca la tabla
wp_options. - Localiza la fila con
option_name=wp_user_roles. - Edita el campo
option_value(está serializado), que tendrá este aspecto:
a:6:{s:13:"administrator";a:2:{s:4:"name";s:13:"Administrator";s:12:"capabilities";a:61:{...}}s:6:"editor";a:2:{...}s:13:"shop_manager";a:2:{...}} - Elimina todo el bloque correspondiente a ese rol (desde
s:X:"nombre_rol"hasta su cierre). - Importante: Ajusta el número al inicio del array (el
a:6:indica que hay 6 roles; si borras uno, debe quedara:5:)
Advertencia: Un error en el formato serializado puede romper tu WordPress. Haz antes copia de seguridad sí o sí.
Borrar perfiles con comandos SQL en phpMyAdmin
Puedes ejecutar consultas SQL, pero requiere deserializar y serializar de nuevo los datos. Francamente, no lo recomiendo porque es más propenso a errores que los métodos anteriores.
Pero, si aún prefieres usar SQL directamente, puedes ejecutar este comando que deserializa, elimina el perfil y vuelve a serializar automáticamente usando las funciones de PHP integradas en MySQL:
UPDATE wp_options
SET option_value = (
SELECT CONCAT(
'a:',
CAST((LENGTH(option_value) - LENGTH(REPLACE(option_value, 's:13:"shop_manager"', ''))) / LENGTH('s:13:"shop_manager"') - 1 AS CHAR),
':',
REPLACE(
SUBSTRING(option_value, 3),
CONCAT('s:13:"shop_manager";a:2:{s:4:"name";s:13:"Shop manager";s:12:"capabilities";',
SUBSTRING_INDEX(SUBSTRING_INDEX(option_value, 's:13:"shop_manager"', -1), '}}', 1),
'}}'),
''
)
)
)
WHERE option_name = 'wp_user_roles';
Ojo: Este ejemplo es complejo y específico para borrar el rol
shop_manager. La realidad es que manipular datos serializados con SQL es muy propenso a errores.
Borrar perfiles con comandos SQL en con una función PHP
Una mejor alternativa sin dejar de usar SQL es usar un script PHP temporal que haga el trabajo correctamente:
<?php
// Conectar a la base de datos
require_once('wp-load.php');
// Obtener perfiles actuales - cambia el prefijo wp_ al tuyo
$roles = get_option('wp_user_roles');
// Eliminar el perfil que quieras (ejemplo: shop_manager)- cambia el prefijo wp_ al tuyo
if (isset($roles['shop_manager'])) {
unset($roles['shop_manager']);
update_option('wp_user_roles', $roles);
echo "Perfil eliminado correctamente";
} else {
echo "El perfil no existe";
}
?>
borrar-rol.php) y súbelo a la carpeta raíz de tu WordPress, ejecútalo una vez accediendo a tudominio.com/borrar-rol.php desde el navegador, y elimínalo inmediatamente después.Si necesitas automatizar el proceso o hacerlo programáticamente:
// Obtener todos los perfiles
global $wp_roles;
$all_roles = $wp_roles->get_names();
// Eliminar un perfil específico
remove_role('nombre_del_rol');
// Verificar si un rol existe antes de eliminarlo
if (get_role('nombre_del_rol')) {
remove_role('nombre_del_rol');
}
Esto es útil si estás desarrollando un plugin o tema personalizado y necesitas gestionar perfiles programáticamente.
Tabla resumen: ¿qué método elegir?
| Método | Dificultad | Cuándo usarlo | Ventajas | Inconvenientes |
|---|---|---|---|---|
| User Role Editor | Fácil | Necesitas gestionar perfiles frecuentemente | Interfaz visual, muy completo, mantenido activamente | Plugin más pesado de lo necesario para eliminar perfiles puntuales |
| Eliminador sencillo de perfiles | Fácil | Limpieza puntual rápida | Muy ligero, específico para esta tarea, se puede desactivar después | Solo sirve para borrar perfiles |
| Snippet de código | Media | Sabes programar y quieres control total | No requiere plugin, ejecución automática | Necesitas editar archivos del tema o métodos alternativos |
| Base de datos | Difícil | Solo si eres desarrollador experimentado | Entiendes cómo funciona WordPress internamente | Riesgo alto de romper algo si te equivocas |
Conclusión y consejos importantes
Hacer limpia de perfiles innecesarios en WordPress es una buena práctica de mantenimiento y seguridad, especialmente si has probado muchos plugins a lo largo del tiempo. Para la mayoría de usuarios, el plugin User Role Editor o el plugin Eliminador sencillo de perfiles son las opciones más seguras y directas.
Si eres desarrollador, el snippet de código te dará más control y te permitirá automatizar el proceso. Los métodos de base de datos déjalos solo para cuando realmente sepas lo que estás haciendo.
En cualquier caso, recuerda siempre hacer copia de seguridad antes de eliminar perfiles, especialmente si tienes usuarios activos en tu WordPress. Más vale prevenir que tener que restaurar toda la base de datos porque se te fue la mano borrando cosas.
¿Has acumulado perfiles de plugins antiguos en tu WordPress? Cuéntame en los comentarios qué método te ha funcionado mejor.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!









Hola Fernando,
Gracias por este artículo. Aplicando este consejo me he dado cuenta que en una web no aparecía el rol de «cliente». Al parecer es un caso muy concreto y común: WooCommerce tiene su propio registro de clientes (en WooCommerce → Clientes) pero en WordPress no se ha asignado el rol customer a los usuarios del sistema, de modo que en Usuarios → Todos los usuarios aparecen “sin rol en este sitio”.
Se puede corregir con un Snippet (correcto y seguro):
/*** VT – Asignar rol Customer a usuarios con pedidos
* Corrige usuarios "sin rol" que sí constan como clientes en WooCommerce.
*/
add_action('admin_init', function () {
if ( ! current_user_can('manage_options') ) {
return; // Solo admins
}
// Evita ejecuciones repetidas si recargas varias veces
if ( get_transient('vt_fix_missing_customer_roles_ran') ) {
return;
}
global $wpdb;
$blog_prefix = $wpdb->get_blog_prefix( get_current_blog_id() );
// Usuarios sin rol en este sitio: metadato capabilities vacío o inexistente
$users = get_users([
'number' => 5000, // Ajusta si necesitas más
'fields' => ['ID'],
'meta_query' => [
'relation' => 'OR',
[
'key' => $blog_prefix . 'capabilities',
'compare' => 'NOT EXISTS',
],
[
'key' => $blog_prefix . 'capabilities',
'value' => 'a:0:{}', // array vacío serializado
'compare' => '=',
],
],
]);
foreach ($users as $u) {
$user_id = is_object($u) ? $u->ID : $u;
// Solo si realmente es cliente con pedidos
if ( function_exists('wc_get_customer_order_count') && wc_get_customer_order_count($user_id) > 0 ) {
$wp_user = new WP_User($user_id);
// Asegura que sigue sin rol antes de asignar
if ( empty($wp_user->roles) ) {
$wp_user->set_role('customer');
}
}
}
// Marca ejecución (10 min). Tras verificar, desactiva/elimina el snippet.
set_transient('vt_fix_missing_customer_roles_ran', 1, 10 * MINUTE_IN_SECONDS);
});
Se puede ajustar además, para que asigne customer a usuarios sin pedidos pero con cuenta creada desde “Mi cuenta”, que también ha sido mi caso y si alguien lo desea, le paso el Snippet. (También se puede crear con IA que es lo que he hecho yo)
Curioso ese caso, sí 🙂