Icono del sitio Imacreste

Cambiar wp-admin en wordpress

La gran virtud de WordPress es a su vez su gran defecto, siempre y cuando no se tomen las medidas adecuadas. Pienso que en la gran mayoría de webs, no es necesario cambiar la URL del administrador, con tener todo actualizado y tener un pequeño control de ataques, y sobretodo con un sistema de backUps, es más que suficiente. Pero procuro cambiar el acceso a wp-admin por que apenas cuesta 30 líneas de código fuente.

Redirigir WP-admin a nuestra URL

function seguridad_admin() {
 $clave = '?MICLAVE';
 $url_pral = 'http://'.$_SERVER['HTTP_HOST'].'/'.'wp-login.php'.'?'.$_SERVER['QUERY_STRING'];
 $mi_hosts = array( 'imacreste.com' );

 if ( ! isset( $_SERVER['HTTP_HOST']) || ! in_array( $_SERVER['HTTP_HOST'], $mi_host ) ) {
  header( $_SERVER['SERVER_PROTOCOL'] . ' Error 404' );
  exit;
 }

 if ( site_url('/wp-login.php'.$clave) == $url_pral ) {
 }else{
  header( 'Location: http://' . $_SERVER['HTTP_HOST'] . '/' );
 }
}
add_action('login_head', 'seguridad_admin');

Con este código conseguimos que si alguien prueba las URLs de acceso al administrador clásicas de WordPress, sea redirigido a la home.  En este ejemplo tendríamos que poner: imacreste.com/wp-login.php?MICLAVE, para acceder al administrador.

El problema es que con este código dejan de funcionar el recordar contraseña, y el posterior envió de la misma.

Podemos solucionarlo con el siguiente código:

function contra_perdida( $lostpassword_url, $redirect = "lostpassword" ) {
 return home_url().'/wp-login.php?MICLAVE&action=' . $redirect;
}
add_filter( 'lostpassword_url', 'contra_perdida' );

function redirigir_despues_recordar() {
 if ($_SERVER['REQUEST_URI']=='/wp-login.php?checkemail=registered'){
  $redirect_url = get_bloginfo('url') . '/registro';
  wp_redirect( home_url().'/wp-login.php?MICLAVE&checkemail=registered' );
  exit;
 }
}
add_action('login_head','redirigir_despues_recordar');

De esta forma las URLs coincidirán con tu nueva clave, solo falta añadir unas reglas para que estas 2 URLs no te envíen a la home, en la función: seguridad_admin:

if ( site_url('/wp-login.php?'.$clave.'&checkemail=confirm' ) == $url_pral ) { 
 return home_url().'/wp-login.php?checkemail=confirm'; 
}if( 
 site_url('/wp-login.php?'.$clave.'&action=lostpassword' ) == $url_pral ) { return home_url().'/wp-login.php?action=lostpassword'; 
}

Y ya estaría, tendríamos el mismo panel de acceso pero detrás de una URL exclusiva, merece la pena, creo que si… ah quedaría resolver el botón de acceder en la página de recordar contraseña,  personalmente lo quito con CSS, pero seguro que se podría editar su URL, pero eso ya depende de ti.

Código completo a poner en functions.php

function seguridad_admin() {
$clave = '?MICLAVE';
$url_pral = 'http://'.$_SERVER['HTTP_HOST'].'/'.'wp-login.php'.'?'.$_SERVER['QUERY_STRING'];
$mi_hosts = array( 'imacreste.com' );

if ( ! isset( $_SERVER['HTTP_HOST']) || ! in_array( $_SERVER['HTTP_HOST'], $mi_host ) ) {
header( $_SERVER['SERVER_PROTOCOL'] . ' Error 404' );
exit;
}

if ( site_url('/wp-login.php?'.$clave.'&checkemail=confirm' ) == $url_pral ) { 
return home_url().'/wp-login.php?checkemail=confirm'; 
}if( 
site_url('/wp-login.php?'.$clave.'&action=lostpassword' ) == $url_pral ) { return home_url().'/wp-login.php?action=lostpassword'; 
}

if ( site_url('/wp-login.php'.$clave) == $url_pral ) {
}else{
header( 'Location: http://' . $_SERVER['HTTP_HOST'] . '/' );
}
}
add_action('login_head', 'seguridad_admin');

function contra_perdida( $lostpassword_url, $redirect = "lostpassword" ) {
return home_url().'/wp-login.php?MICLAVE&action=' . $redirect;
}
add_filter( 'lostpassword_url', 'contra_perdida' );

function redirigir_despues_recordar() {
if ($_SERVER['REQUEST_URI']=='/wp-login.php?checkemail=registered'){
$redirect_url = get_bloginfo('url') . '/registro';
wp_redirect( home_url().'/wp-login.php?MICLAVE&checkemail=registered' );
exit;
}
}
add_action('login_head','redirigir_despues_recordar');
Salir de la versión móvil