
🔧 WP All Import: cómo reunir todas las imágenes de la entrada en una sola galería
Importé cien publicaciones mediante WP All Import y las imágenes quedaron dispersas por el contenido de forma aleatoria: estiradas a ancho completo en algunos lugares, apretadas contra el texto en otros y colgando como enlaces rotos en el resto. Revisar cada publicación manualmente es una tarde perdida.
Existe una forma de reunir todo en una sola galería. Automáticamente, sin editar el contenido a mano. El método funciona tanto para importaciones nuevas como para publicaciones subidas hace un mes. A continuación, dos enfoques: el sencillo (sobre la marcha, mediante el hook pmxi_gallery_image) y el post-factum (con actualización masiva). Ambos probados en WP All Import 4.9+.
💡 Resumen rápido:
- Prepare CSV o XML: enlaces de imagen como URL completas, una por línea
- En la plantilla de importación, configure la sección Imágenes y especifique el campo con las imágenes
- Añada el hook
pmxi_gallery_imageafunctions.php, la galería se ensambla sola durante la importación - Para publicaciones antiguas: una función que reemplaza
<img>por el shortcode de galería y actualización masiva
Cómo preparar las imágenes para la importación
Antes de ejecutar la importación, los enlaces de imagen deben tener el formato correcto. WP All Import descarga imágenes solo si la URL es completa, directa y apunta a un archivo, no a una página HTML.
Supongamos que en el sitio antiguo la galería tiene este aspecto:
1 <a href="/cache/images/photo1.jpg" data-lightbox="group:1" title="Photo 1"> 2 <img src="/cache/images/photo1_thumb.jpg" alt="Photo 1"> 3 </a> 4 <a href="/cache/images/photo2.jpg" data-lightbox="group:1" title="Photo 2"> 5 <img src="/cache/images/photo2_thumb.jpg" alt="Photo 2"> 6 </a>
Tras el parseo, en el archivo CSV para la importación, los enlaces deben convertirse en URL completas, una por línea, sin envoltura HTML:
1 http://newsite.com/files/photo1.jpg 2 http://newsite.com/files/photo2.jpg
Donde http://newsite.com es el dominio del sitio al que está importando. Crítico: si los enlaces son relativos o apuntan al dominio antiguo, WP All Import no recogerá los archivos y no los subirá a la biblioteca de medios.
Los enlaces en el cuerpo de la publicación deben coincidir uno a uno con los que le proporciona al plugin para la subida. De lo contrario, tras la importación, algunas etiquetas <img> conservarán las URL antiguas y no se incluirán en la galería.
Configuración de la plantilla de importación en WP All Import
En la interfaz del plugin, vaya a la plantilla de importación. La sección principal aquí es Imágenes. Tiene este aspecto:

En la sección Imágenes, especifique el campo que contiene los enlaces de imagen. Normalmente es una celda CSV separada (por ejemplo, gallery_images), donde los enlaces se listan con un separador, por defecto |:
1 http://newsite.com/files/photo1.jpg | http://newsite.com/files/photo2.jpg | http://newsite.com/files/photo3.jpg
WP All Import analizará la cadena, descargará cada imagen y la añadirá a la biblioteca de medios de WordPress. Pero por ahora las imágenes solo quedan adjuntas a la publicación como archivos adjuntos. La galería la ensamblaremos por separado.
Asegúrese de comprobar cómo maneja el plugin la subida. Haga clic en Vista previa y prueba, luego en Ejecutar prueba. Una marca verde junto al número de imágenes significa que todo está configurado correctamente. Una cruz roja significa que debe revisar las URL: deben ser completas y directas.
Antes de iniciar la importación, suba los archivos de imagen a la carpeta files en la raíz del sitio, si el plugin toma las imágenes del servidor y no de URL externas.
Cómo ensamblar la galería sobre la marcha: hook pmxi_gallery_image
La forma más limpia es ensamblar la galería justo durante la importación. WP All Import proporciona el hook pmxi_gallery_image, que se dispara por cada imagen subida. Usted intercepta el ID del adjunto y lo guarda en el campo meta de la publicación en el formato deseado.
Tres variantes probadas, elija según su tema o plugin de galería.
Variante 1: array de IDs de adjunto. Adecuada para la mayoría de temas que esperan la galería como un array de IDs de adjunto:
1 function my_gallery_ids($post_id, $att_id, $filepath, $is_keep_existing_images) 2 { 3 $key = '_my_gallery'; 4 $gallery = get_post_meta($post_id, $key, true); 5 6 if (empty($gallery)) { 7 $gallery = array(); 8 } 9 10 if (!in_array($att_id, $gallery)) { 11 $gallery[] = $att_id; 12 update_post_meta($post_id, $key, $gallery); 13 } 14 } 15 add_action('pmxi_gallery_image', 'my_gallery_ids', 10, 4);
Variante 2: array de URL. Si el tema necesita enlaces directos a las imágenes a tamaño completo:
1 function my_gallery_urls($post_id, $att_id, $filepath, $is_keep_existing_images) 2 { 3 $key = '_my_gallery'; 4 $size = 'full'; 5 $gallery = get_post_meta($post_id, $key, true); 6 7 if (empty($gallery)) { 8 $gallery = array(); 9 } 10 11 if (!isset($gallery[$att_id])) { 12 $src = wp_get_attachment_image_src($att_id, $size); 13 $gallery[$att_id] = $src[0]; 14 update_post_meta($post_id, $key, $gallery); 15 } 16 } 17 add_action('pmxi_gallery_image', 'my_gallery_urls', 10, 4);
Variante 3: cadena con separador. Si el campo meta almacena IDs separados por coma (formato "23,25,31"):
1 function my_gallery_string($post_id, $att_id, $filepath, $is_keep_existing_images) 2 { 3 $key = '_my_gallery'; 4 $sep = ','; 5 $gallery = get_post_meta($post_id, $key, true); 6 7 if (is_string($gallery) || empty($gallery) || $gallery == false) { 8 $gallery = explode($sep, $gallery); 9 if (!in_array($att_id, $gallery)) { 10 if ($gallery[0] == '') unset($gallery[0]); 11 $gallery[] = $att_id; 12 update_post_meta($post_id, $key, implode($sep, $gallery)); 13 } 14 } 15 } 16 add_action('pmxi_gallery_image', 'my_gallery_string', 10, 4);
El código se inserta en el functions.php del tema. Una vez completada la importación, el hook puede eliminarse, el campo meta ya está poblado. Ventaja de este método: la galería está lista inmediatamente después de la importación, sin pasadas adicionales.
Qué hacer con las publicaciones ya importadas
Si las publicaciones ya están subidas y las imágenes cuelgan en el contenido como etiquetas <img> normales, necesita un enfoque diferente. Recorra todas las publicaciones y reemplace las etiquetas por el shortcode de galería.
La función a continuación recopila todos los IDs de adjunto de una publicación y reemplaza <img> en el contenido por [gallery ids="..."]:
1 function replace_post_images_with_gallery($post_id) 2 { 3 $post = get_post($post_id); 4 if (!$post) return; 5 6 $attachments = get_attached_media('image', $post_id); 7 8 if (empty($attachments)) return; 9 10 $ids = array(); 11 foreach ($attachments as $att) { 12 $ids[] = $att->ID; 13 } 14 15 $gallery_shortcode = '[gallery ids="' . implode(',', $ids) . '"]'; 16 $content = preg_replace('/<img[^>]+>/i', '', $post->post_content); 17 $content = $gallery_shortcode . "\n\n" . $content; 18 19 wp_update_post(array( 20 'ID' => $post_id, 21 'post_content' => $content, 22 )); 23 }
Luego ejecute una actualización masiva:
- En el panel de administración, vaya a la lista de todas las publicaciones.
- En las opciones de pantalla, establezca el número de elementos en 50 (óptimo para que el servidor no colapse).
- Seleccione todas las publicaciones, elija «Actualizar» en acciones en lote y aplique.
WordPress recorrerá cada publicación, llamará a save_post y los hooks relacionados. Si la función en functions.php está vinculada a save_post, se ejecutará. Una vez completado, **elimine el código de **functions.php, de lo contrario, con cada guardado de publicación, el contenido se reconstruirá de nuevo.
⁉️🤔 Preguntas frecuentes
WP All Import** no descarga imágenes durante la importación, ¿qué falla?**
Los enlaces en el archivo de importación deben ser URL completas (con
http://ohttps://) y conducir directamente a un archivo de imagen, no a una página HTML. Verifique los permisos de escritura dewp-content/uploads: si el servidor no puede guardar el archivo, la importación de imágenes se omite silenciosamente. La razón más común es una falta de coincidencia entre los enlaces en el cuerpo del contenido y en el campo Imágenes de la plantilla. Si el contenido tienehttp://oldsite.com/img.jpgy en Imágenes se proporcionahttp://newsite.com/files/img.jpg, el plugin no los vinculará y la imagen quedará rota. Las URL deben coincidir uno a uno.
¿Por qué pmxi_gallery_image es mejor que la post-importación?
El hook se dispara por cada imagen en el momento de la subida, la galería está lista justo después de la importación, sin una segunda pasada. La post-importación mediante
wp_update_postcarga el servidor: mil publicaciones generan mil llamadas asave_post. Para volúmenes de hasta 100 publicaciones, la diferencia es insignificante, pero para migraciones grandes, el hook ahorra horas. Además,pmxi_gallery_imageda acceso a la ruta del archivo subido y al ID del adjunto, puede prescribir inmediatamente cualquier lógica: distribuir por carpetas, añadir al slider, sincronizar con CDN. La post-importación no ofrece esa flexibilidad.
¿Es necesario eliminar el código de functions.php después de la importación?
Sí. Si la función cuelga de
pmxi_gallery_image, se dispara ante CUALQUIER adición de adjunto, el resultado: duplicados en el campo meta de la galería al subir imágenes manualmente. El hook se ejecuta una vez, una vez completada la importación, puede eliminarse sin problema. Si la función está vinculada asave_posto se usa en actualización masiva, con más razón elimínela. De lo contrario, cada edición de publicación reconstruirá el contenido, eliminando etiquetas<img>y reescribiendo la galería.
¿Cómo dejar imágenes individuales fuera de la galería?
Exclúyalas del reemplazo. En la variante con
pmxi_gallery_image, añada una condición por tamaño o texto alternativo. En la variante con post-importación, en lugar depreg_replacepara todos los<img>, use reemplazo selectivo: deje las imágenes con una clase CSS o atributo específico, elimine el resto y reemplace por galería. Por ejemplo,<img class="keep">permanece en el contenido, todos los demás<img>se reemplazan por[gallery]. Se resuelve refinando la expresión regular en la función de reemplazo.
¿Es necesario WP All Import Pro o basta con la versión gratuita?
La versión gratuita puede importar imágenes a la biblioteca de medios y adjuntarlas a una publicación. El hook
pmxi_gallery_imagetambién está disponible en ella. La versión Pro añade: carga de imágenes desde URL externas, importaciones Cron programadas, ejecución de funciones PHP directamente en la plantilla de importación y soporte para campos personalizados. Para una importación única con archivos locales, la versión gratuita es más que suficiente. Pro es necesaria cuando las imágenes están en un servidor de terceros y no quiere descargarlas manualmente, así como para campos ACF, importación de WooCommerce y trabajo con tipos de publicación personalizados.
Qué método elegir para su tarea
Si está planificando una importación, ensamble la galería sobre la marcha mediante pmxi_gallery_image. Más rápido, más limpio y sin doble carga en el servidor. Cualquiera de las tres variantes anteriores funciona: la elección depende del formato en que su tema o plugin espere la galería.
Si las publicaciones ya están subidas y las imágenes están dispersas por el contenido, tome la función para reemplazar <img> por [gallery] y ejecute una actualización masiva. Para volúmenes pequeños (hasta 200 publicaciones), esto tomará un par de minutos. Para miles de publicaciones, es más sensato dividir en lotes de 50.
WP All Import en sí mismo es uno de los importadores más flexibles para WordPress. Más de 200 000 instalaciones activas, la versión gratuita en WordPress.org cubre la mayoría de las tareas de migración. Y la versión Pro elimina las últimas limitaciones sobre URL externas e importaciones Cron. Pruébelo.



