Si quieres evitar que los perfiles de usuario por debajo de un rol determinado tengan acceso al Escritorio de WordPress, a cualquier parte de ‘wp-admin’, o los que no accedan desde una IP concreta, puedes hacerlo de varias maneras.
Como siempre, voy a mostrarte unos cuantos modos, con código, por IP y con plugin, vamos a verlo …
1. Restringir acceso wp-admin con plugin
Hay muchas maneras de proteger el Escritorio pero el plugin que te ofrece más posibilidades es WP Secure, con el puedes limitar el acceso a wp-admin por IP o por tipo de usuario, tu eliges.
2. Restringir acceso wp-admin por IP
Para este método nos valdremos el fichero .htaccess
. Primero editamos el existente en la carpeta raíz de tu sitio desde el cliente FTP que uses habitualmente o el navegador de tu proveedor de hosting. Si no existiera lo creas y, en cualquier caso, le añades lo siguiente:
<Files wp-login.php> Order Deny, Allow Deny from all Allow from xx.xx.xx.xx Allow from xx.xx.xx.xx </Files>
Donde las xx.xx.xx.xx son las IP que SI pueden acceder. Si no sabes tu IP puedes comprobarlo aquí.
Pero no hemos terminado, ahora vas a la carpeta ‘wp-admin’ y creas (si no existiera) otro fichero .htaccess
en su interior. En el añades lo siguiente:
Order Deny,Allow Deny from all Allow from xx.xx.xx.xx Allow from xx.xx.xx.xx
De nuevo las xx.xx.xx.xx son las IPs autorizadas. Guardas los cambios y ya lo tienes
3. Restringir acceso a wp-admin por código
Para terminar, puedes también conseguir lo mismo añadiendo el siguiente código al fichero functions.php
de tu tema activo:
<?php function restringir_login(){ global $current_user; get_currentuserinfo(); if ($current_user->user_level < 4) { //si no es admin no entra wp_redirect( get_bloginfo('url') ); exit; } } add_action('admin_init', 'restringir_login', 1); ?>
En este ejemplo todo usuario por debajo del nivel de Administrador (4) no podrá acceder. Así de fácil.
¿Sabes algún modo más?
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Hay que tener cuidado al restringir acceso a WP-ADMIN ya que podría afectar a algunos plugins vía AJAX:
http://codex.wordpress.org/Hardening_WordPress#Securing_wp-admin
justo eso me paso 🙁 gracias por el dato
Perfecto Fernando!! Buscaba algo de este tipo!! Por cierto, sabes de algún documento donde explique bien como usar, modificar, y añadir código a functions.php
Saludos!!
No recuerdo ahora Asier pero en realidad no hay mucho que hacer, es simplemente añadir código sin interferir en los que ya haya, respetando el comienzo y fin de <php
En el snippet de PHP que pones sobra la línea 4.
Ya que si accedes a la variable global $current_user ya no necesitas hacer la llamada de la línea 4 (que además no asignas a ninguna variable, y por tanto no guardas la información que consultas).
Incluso podrías ahorrarte también la 3 si la comprobación de nivel la hicieras con current_user_can(), que es mucho más apropiada para el caso
Genial, gracias por la corrección 🙂
Muchas gracias sobre todo por indicarnos varias formas de hacerlo. Pero una pregunta. Si limitas por IP, la tienes dinámica y cambia. ¿Siempre se puede modificar el htaccess porque no impide la entrada por FTP como siempre no?
Claro, por ftp siempre puedes entrar a cambiarlo si tienes ip dinámica
Gracias 🙂
con todas la correciones como queda finalmente el codigo?
Esto sigue funcionando??
A mi al usar
Order Deny, Allow
Deny from all
Allow from 95.64.423.233
(ip cambiada por seguridad)
Me da error:
Internal Server ErrorThe server encountered an internal error or misconfiguration and was unable to complete your request.
Incluí el código en function,php, y no puedo entrar al blog, me da error de syntaxis y tengo que entregarlo hoy en unas horas, se puede hacer algo, Este es el error que me da
Parse error : syntax error, unexpected ‘<' en / home/a3176145/public_html/wp-content/themes/twentyten/functions.php on line 515
Por favor, ayuda urgente la url es http://www.zonatest.comuf.com esta en 000webhost
Algo debes haber copiado mal, revisa las comillas. A las malas usa algún plugin
Basada en esta función, podemos, sabemos que los roles tienen ciertas capacidades, así pues si queremos restringir el acceso en lugar de por roles, por una cierta capacidad podriamos usar la siguiente función que simplemente es una modificación de la aqui expuesta:
//funcion para evitar que los usuarios con el rol «teacher» o «student»
//puedan acceder al wp-admin
function restringir_login(){
global $current_user;
if (!current_user_can(‘activate_plugins’) ) {
//si no puede activar plugins no entra
wp_redirect( get_bloginfo(‘url’) );
exit;
}
}
add_action(‘admin_init’, ‘restringir_login’, 1);
En este caso solo checkeo si el usuario puede activar plugins, si es así le doy acceso a la Dashboard, si no lo redirijo al indice del site.
Gracias por tu aporte !!!
me sirvio para adaptarlo a lo que yo necesitaba 😀
Sabes alguna manera de hacer lo mismo pero para que sólo desde mi ip poder acceder al cpanel?
Hola, te cuento mi caso por si me puedes orientar,por si es posible hacer lo que quiero, tenemos un wp con las carreras en las que participa mi equipo de atletismo y el problema es que ya vamos por 60 miembros y cada vez tenemos mas eventos cada fin de semana, con lo que me resulta muy costoso el tenerla al día, como se podría limitar el acceso para que cada miembro pudiera darse de alta en las diferentes carreras que participamos.
Para los miembros del equipo usamos: Miembros del equipo de ModernThemes
Para los eventos o carreras usamos: All-in-One Event Calendar by Time.ly
Un saludo, Feliz Año y gracias.
Hola Fernando Tellado podrías apoyarme por favor, quiero restringir únicamente el acceso al escritorio para que no puedan modificar nada ni su perfil únicamente los suscriptores, pero cuando hago eso fallan completos de mi pagina que utilizan ajax y únicamente funcionan dichos complementos para los administradores.
así es como tengo mi función
//Acceso prohibido a admin de suscriptores
function restrict_access_admin_panel(){
global $current_user;
wp_get_current_user();
if ($current_user->user_level < 4) { wp_redirect( get_bloginfo('url') ); exit; } } add_action('admin_init', 'restrict_access_admin_panel', 1);