Cómo migrar imágenes de un servidor externo a tu blog

Hoy me he despertado con frío y por eso he decidido ponerme los guantes de pica-código (solo un poquito que tampoco hace tanto frío!) para contaros una solución a un posible problema/situación en la que os podríais encontrar con las imágenes de vuestros blogs en WordPress.

Con este artículo lo que pretendo es ofrecer una solución si las imágenes de tu blog están alojadas en un servidor externo y, por la razón que seas, quieres migrar todas a tu propio servidor donde tienes instalado tu blog.

Hay muchos blogs (el mío en concreto hasta hace unos minutos) que tienen las imágenes alojadas en otro servidor externo.

Esto puede darse por varias situaciones:

  • Porque en su día decidiste contratar algún servicio de almacenamiento de imágenes externo. Creo que más antes que ahora, se llevaba mucho el tener las imágenes en un servidor externo ya que de esa forma te ahorrabas espacio en el tuyo, podrías tener una velocidad de carga de las mismas más rápida (al ser un servicio a medida para imágenes), evitabas consumir ancho de banda de tu servidor, etc. Normalmente estos factores estaban limitados, pero cada vez tendemos a no tener límite en los mismos -> los espacios de almacenamiento y ancho de banda en los hostings suelen ser ilimitados y la velocidad de carga es cada vez mayor ya que hay muchas opciones para optimizar la carga de tus imágenes.
  • Porque has realizado una migración de Blogger a WordPress en tu blog (por ejemplo). Cuando migras tu blog de otra plataforma a WordPress, las imágenes de tus artículos normalmente se quedan en el servidor anterior. Por ejemplo, si migras tus artículos de Blogger a WordPress, tus artículos serán pasados a tu nueva base de datos en WP, pero tus imágenes seguirán en el servidor de Blogger. Eso te puede causar problemas si algún día cierras el otro blog y Google decide limpiar sus servidores ya que perderías todas las imágenes y tus artículos se quedarían desnudos.
  • etc.

Sea cual sea la razón, es posible que te veas en esa situación y quieras migrar las imágenes a tu servidor.

migrar imágenes wordpress

¿Porqué migrar tus imágenes de un servidor externo a tu blog?

Si es mejor tener las imágenes en un servidor externo o uno interno (por lo comentado en el punto 1) sería motivo de discusión en otro artículo pero sí que es cierto que al final, tenerlas en el mismo hosting, y bajo la plataforma WordPress, te ahorra varios problemas como pueden ser los siguientes:

  • Las imágenes estarán en tu servidor. Hace tiempo me pasó que tenía las imágenes en una plataforma que dejó de existir. ¿Os imagináis lo que pasó con las mismas no? Tuve que volver a crear imágenes para los artículos. Reconozco que aún veréis muchos artículos muuuuuy antiguos de Monetizados con imágenes erróneas (es una tarea en la «to-do list» ya que no da muy buena imagen). Ahora pasarán a estar bajo tu control y podrás hacer todos los backups que quieras para no perderlas.
  • La mayoría de plantillas de WordPress dan por hecho que las imágenes las tienes en tu propio servidor en la carpeta concreta de tu blog. Eso hace que si las tienes en servidores externos, tendrás que aplicar ciertas soluciones para que estas aparezcan en ciertos elementos como la imagen adjunta a la lista de artículos en tu home, o cosas similares. Cada vez que instalaba un tema nuevo de wordpress, tenía que estar copiando ciertas funciones para que las imágenes se mostraran bien en la home. De la misma forma muchos plugins no se mostrarían correctamente con imágenes en servidores externos.

Pues bien, si te ves reflejado en alguna de estas situaciones y quieres dar el paso de mover las imágenes a tu propio servidor, hay varias opciones:

  • Ir una a una descargándolas en tu máquina y sustituyendo la URL de las mismas en cada artículo. En el caso de Monetizados, hay 441 artículos en estos momentos, por lo que no sería muy viable.
  • Usar un plugin destinado a tal fin con algún truquillo para hacerlo más ágil, tal y como os contaré a continuacíón.

Como no quiero que perdáis mucho tiempo en esta tarea, os voy a comentar cómo hacerlo mediante la segunda opción: instalar un plugin y meterle un poco de mano para cubrir un el «gran» defecto que tiene.

Auto Upload Images – Plugin para migrar tus imágenes

Efectivamente, el plugin que os voy a comentar se llama Auto Upload Images. Es posible que haya otros para hacer lo mismo pero este es el que me ha venido bien a mi con una pequeña modificación.

Su funcionamiento es simplísimo y lo que hace es lo que he comentado: te permite pasar tus imágenes alojadas en otro servidor al tuyo propio en todos tus artículos.

No tiene ninguna complicación usar este plugin, aunque sí alguna pequeña molestia subsanable con un poquito de trabajo (que os ahorraré y solo tendréis que hacer una pequeña parte del mismo).

El plugin en sí no tienen ningún tipo de configuración. Lo único que tendrás que hacer será instalarlo en tu blog, y ya está, ya estará funcionando para ti.

El funcionamiento en el siguiente:

Lo que hará el plugin será descargar la imagen de tu servidor externo, realizar una copia en el tuyo propio (en la carpeta correspondiente siguiendo la estructura de WordPress), y modificar la URL dentro del artículo. De esa forma ya has realizado la migración. Eso lo hará cada vez que des a «Actualizar» en la pantalla de edición de cualquiera de los artículos de tu blog. Ese artículo concreto estará ya migrado correctamente.

Hasta ahí perfecto, pero ahí tenemos el pequeño problema de este plugin (o grande según se mire): Para que funcione tendremos que ir editando los artículos y guardándolos UNO a UNO.

En el caso de los 441 artículos de Monetizados, os imagináis que tengo mejor plan para un fin de semana que ponerme a hacer eso 441 veces!! jejej ;-).

Ahí es cuando me he puesto a pensar en una posible solución y gracias al frío y a los guantes de pica-código la he encontrado en las propias entrañas del plugin.

Solución al problema del plugin Auto Upload Images

Obviamente lo que queremos es realizar la migración de todos los artículos de un tirón, y no tener que ir uno a uno.

Os aviso que a partir de ahora lo que voy a contar es bajo vuestra responsabilidad (no quiero cabezas de caballo en mi cama!!! :-P). Es decir, que sino te sientes muy cómodo tocando archivos de código de WordPress (ya que tendrás que modificar una pequeña cosa con lo que yo os diré ahora) mejor pide ayuda a alguien que tengas cerca, o a mi mismo, estaré encantado de ayudarte.

Aún así, siempre que vayamos a hacer algún cambio en nuestro código, por mínimo que sea, siempre recomiendo que hagas una copia del mismo. Para ello deberás:

  • Descargarte con un programa de FTP los archivos de tu blog.
  • Realizar una copia de la base de datos.
  • O, realizar primero el cambio en tu ordenador con la copia en local de tu blog -> En el artículo enlazado te enseño a cómo hacerlo.

Si estás usando el plugin de Yoast SEO, vas a necesitar recuperar, al final de los pasos que contaré a continuación, la tabla «wp_dfpt_postmeta», así que asegúrate de que has hecho correctamente el backup de la base de datos para luego tener los datos de esta tabla.

Pues bien, si ya has engañado a algún amigo, o si te has puesto tú mismo los guantes de pica-código, ahí vamos con el pequeño cambio que vamos a hacer.

Para entender el cambio, os diré que en el código del plugin veremos que está diseñado para un único artículo. Por tanto, el cambio será fácil, tendremos que usar esa funcionalidad haciendo una pequeña modificación para que, en vez de guardar solo un artículo, recorra todos los de tu blog y haga ese cambio en todos.

Lo único que tendrías que hacer después del cambio será guardar uno solo de ellos de la forma que he explicado antes: Editarlo -> «Actualizar».

Vamos a ello!!

Os voy a copiar a continuación el código que deberéis insertar en el fichero:

<url_base_de_tu_blog>/wp-contents/plugins/auto-upload-images/index.php.

Antes de seguir, aseguraos que el plugin está desactivado. Es decir, después de instalarlo seguramente lo hayas activado (todos los hacemos!). Pues desactívalo para para evitar problemas de caché o lo que sea al actualizar al código a continuación.

Abrimos ese archivo y añadimos lo que pongo en negrita en el sitio exacto donde lo he puesto yo (fijaos en el resto de código que debería estar ya en vuestro archivo):

if ( false !== wp_is_post_revision($post_id) )
return;

global $wpdb;

$postids=$wpdb->get_col(«SELECT ID FROM $wpdb->posts WHERE post_status=’publish'»);

foreach($postids as $post_id){

unset($new_images_url);
unset($content);

$content = $wpdb->get_var( «SELECT post_content FROM wp_posts WHERE ID=’$post_id’ LIMIT 1″ );

$images_url = $this->wp_get_images_url($content);

if($images_url) {
foreach ($images_url as $image_url) {
if(!$this->wp_is_myurl($image_url) && $new_image_url = $this->wp_save_image($image_url, $post_id)) {
$new_images_url[] = $new_image_url;
unset($new_image_url);
} else {
$new_images_url[] = $image_url;
}
}

$total = count($new_images_url);

for ($i = 0; $i <= $total-1; $i++) {
$new_images_url[$i] = parse_url($new_images_url[$i]);
$content = preg_replace(‘/’. preg_quote($images_url[$i], ‘/’) .’/’, $new_images_url[$i][‘path’], $content);
}

remove_action( ‘save_post’, array($this, ‘auto_upload’) );
wp_update_post( array(‘ID’ => $post_id, ‘post_content’ => $content) );
add_action( ‘save_post’, array($this, ‘auto_upload’) );
}
}
}

Solo tendréis que añadir lo que está en negrita. El resto del código será el mismo. Fijaos en el corchete que también está en negrita al final del código que he pegado!!! Por si no se viera muy bien, aseguraos que en esa parte tenéis tres corchetes después de haberlo editado.

También fijaos en que está en negrita la palabra «wp_posts» en medio de una sentencia que no lo está. Eso es un pequeño fallo de este plugin, ya que si la tabla donde tienes tu artículos no se llama así, el plugin no funcionará :-S. Por eso, reemplazad esa palabra por «$wpdb->posts» y así no tendrás problemas.

Esa sentencia quedaría, por tanto, así:

$content = $wpdb->get_var( «SELECT post_content FROM $wpdb->posts WHERE ID=’$post_id’ LIMIT 1″ );

Ahora solo queda lo comentado:

Entrad en vuestro panel de control -> Id a la opción de editar posts -> Editad cualquiera de ellos -> pulsad en «Actualizar».

Después de unos segundos cargando… debería estar realizada la migración de las imágenes!

Después de comprobar que está todo correcto, lo que vamos a hacer es desactivar el plugin (o borrarlo directamente si así lo prefieres). De esa forma evitaremos que se esté ejecutando cada vez que vayamos a guardar un artículo nuevo. En principio no va a hacer nada, ya que para la operativa, el plugin comprueba si la imagen está en tu servidor ya antes de hacer nada, pero ya estás realizando una ejecución extra innecesaria.

Al actualizar los datos de esta forma, habremos modificado los de la tabla «wp_dfpt_postmeta» que he comentado a continuación. Tendremos que recuperar el contenido de la misma del backup que habíamos hecho de la base de datos. Esto es porque se guardará en todos los artículos el título y descripción del post desde el que hemos dado a «Actualizar». Simplemente obtén del backup los datos de esa tabla y reemplázala por la original.

Si alguien tiene que hacer esta tarea pero no se ve muy seguro, o se le escapa un poco lo que comento, por favor, comentádmelo y os echaré una mano sin problemas. También puedo enviaros directamente el fichero «índex.php» del plugin para que lo sustituyáis por el vuestro y así no tenéis que meter mano al código.

Para cualquiera de las dos opciones, dejadme un comentario o contactarme por mail!

¿Qué os parece este truco? ¿Os veis en la necesidad de hacer este cambio y os lo estáis planteando? ¿Has hecho algo parecido de alguna otra forma? Cualquier comentario será muuuy enriquecedor para todos! 🙂

Rate this post

Esta entrada tiene 3 comentarios


  1. Notice: Only variables should be assigned by reference in /home/monetizados/web/monetizados.com/public_html/wp-content/plugins/subscribe-to-comments/subscribe-to-comments.php on line 590
    Víctor Campuzano (@vcgs_net)

    Que currada Javi!!!

    Si señor, ahí se nota cuando estás delante de un gran profesional, cuando se da una circunstancia complicada y es capaz de dar una solución buena y elegante.

    Me quito el sombrero contigo tío, de verdad. Mira que yo tengo todas las imágenes en mi servidor y no creo que use este plugin pero nunca se sabe. Si alguna vez me veo en la situación, válgame el señor que te lo agradeceré a montones.

    Un abrazo D. JaviEn! 🙂


    1. Notice: Only variables should be assigned by reference in /home/monetizados/web/monetizados.com/public_html/wp-content/plugins/subscribe-to-comments/subscribe-to-comments.php on line 590
      Javier Elices

      Que honor Victor!

      Muchas gracias por tu comentario de veras…

      La verdad es que, como bien dices, es un artículo para una necesidad muy concreta, pero hablando con varias personas he visto que muchos han realizado migraciones de Blogger a WordPress y es posible que se encuentren con el problema de las imágenes. Al final, si a una persona le vale, estaré encantado!! 🙂 jejej.

      Además es algo que he aplicado yo mismo (minutos antes de empezar a escribir el artículo de hecho) y por eso me gusta comentar cómo lo he conseguido.

      Lo dicho, todo un honor que te hayas pasado por aquí y hayas dejado un comentario con toooodo el lío que tienes encima!! que estás hecho un currante!

      Un abrazo amigo!


  2. Notice: Only variables should be assigned by reference in /home/monetizados/web/monetizados.com/public_html/wp-content/plugins/subscribe-to-comments/subscribe-to-comments.php on line 590
    Carlos

    Llámalo casualidad o como quieras. Pero estaba buscando esto (solo para algunos post) y no encontraba nada. Por cierto muy bueno el blog.

Deja una respuesta

  Acepto la política de privacidad