Os voy a explicar como mantengo el código de mi blog sincronizado entre el servidor “online”, y mi instalación en localhost, el problema es que WordPress tiene asignado un dominio principal que se guarda en la base de datos en la tabla de configuraciones, con los parámetros “siteurl” y “home”, si entras desde localhost y tienes configurado tu dominio, cualquier enlace te va a redirigir al dominio configurado en WordPress, por lo que para trabajar en local hay que cambiar esas variables y volver a restaurarlas antes de subirlo de nuevo.
El otro problema es que en wp-config solo se puede configurar una base de datos, por lo que de nuevo hay que estar cambiando estos valores constantemente, la solución es sencilla para ambos casos, en wp-config podemos usar este código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
if (!in_array($_SERVER['REMOTE_ADDR'], array("127.0.0.1","::1"))) { define ('SITEURL', 'http://midominio.com'); define ('HOME', 'http://midominio.com'); define('DB_NAME', 'XXX'); define('DB_USER', 'XXX'); define('DB_PASSWORD', 'XXX'); define('DB_HOST', 'XXX'); } else { define ('SITEURL', 'http://localhost/midominio'); define ('HOME', 'http://localhost/midominio'); define('DB_NAME', 'XXX'); define('DB_USER', 'XXX'); define('DB_PASSWORD', 'XXX'); define('DB_HOST', 'localhost'); } |
La IP del if es por que “localhost” se traduce en 127.0.0.1 en IPv4 y en ::1 en IPv6. Luego en functions.php de nuestro template colocar esta función:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
update_domain_settings(); /** * update_domain_settings */ function update_domain_settings() { $domain_updated = false; if(get_option('siteurl') != SITEURL) { update_option('siteurl', SITEURL); $domain_updated = true; } if(get_option('home') != HOME) { update_option('home', HOME); $domain_updated = true; } if($domain_updated === true) { header("Location: " . home_url()); exit; } } |
Por supuesto, si no queremos tener la base de datos sincronizada esto ultimo no es necesario, ni los valores “SITEURL” y “HOME” en wp-config, ya que en la base de datos local podemos tener un dominio y en la del servidor otro distinto.