Es increíble que se vean tantísimos tutoriales y artículos en los que se hacen cosas como esta:

if( current_user_can('administrator') ) {
}

Si has leído algunos de esos tutoriales y estás utilizando un código parecido, deja de hacerlo YA. La función current_user_can(), como su nombre indica, comprueba si el usuario actual puede o no puede hacer algo, y que yo sepa cosas como “administrator” o “author” no son cosas que se puedan “hacer”. Un usuario podrá SER administrador pero no HACER administrador. En otras palabras, la función current_user_can() está destinada a comprobar capabilities (competencias) del usuario, no roles.

El hecho de que se utilice esta función para comprobar roles parece venir de antiguo y se ha ido perpetuando en Internet a pesar de que la documentación oficial dice claramente que no se garantiza que funcione correctamente para ese fin.

Y por si fuera poco, se reportaron errores al respecto (t#22624, #20824) pero se aceptaron como bug. ¿Qué quiere decir que no se aceptó como bug? Pues que no es un error de la función el no funcionar correctamente con roles por que no es su intención. El no aceptarse como bug también implica que no se pondrá ningún esfuerzo en solucionarlo.

Así que, por favor, dejar de utilizar current_user_can para comprobar roles de usuario y aprende a hacerlo correctamente.