Obtenga imágenes por URL mediante programación y guárdelas en la carpeta de cargas

14

Estoy involucrado en una gran migración de otro CMS a WordPress. Tenemos una copia de la base de datos y hemos resuelto cómo extraer el contenido y crear publicaciones de WordPress mediante programación utilizando una instanciación de la wpdbclase.

Sin embargo, hay un par de miles de imágenes que nos gustaría mostrar automáticamente, generar los diferentes tamaños y luego adjuntar a las publicaciones para ahorrar aproximadamente una semana de trabajo.

¿Hay alguna manera de obtener una imagen de un sitio remoto por URL y guardarla en mi carpeta wp-uploads? Supongo que esto usa wp_httppero no estoy familiarizado con eso.

Una vez que tengo la imagen y la guardo, estoy bien, ya que puedo usarla wp_generate_attachment_metadatapara crear varios tamaños y wp_insert_attachmentadjuntarla a una publicación.

Gracias simon

Simon Blackbourn
fuente

Respuestas:

29

En realidad, hay una gran función que hará las tres cosas por usted:

media_sideload_image( $url, $post_id, $description );

El primer argumento es la url remota de la imagen que desea descargar. El segundo argumento es la identificación de la publicación a la que desea adjuntar la imagen. El tercer argumento es opcional, pero será una descripción si se incluye.

Sugeriría encontrar una manera de acelerar las descargas para que no se agote el tiempo de espera, como limitar la cantidad de imágenes que extrae por carga y configurar el importador para que se actualice entre descargas, o usar AJAX para hacerlas. a la vez asincrónicamente

John P Bloch
fuente
1
eso es absolutamente fantástico John, muchas gracias, funciona perfectamente. el estrangulamiento no es un problema, ya que lo configuré para esperar una pulsación de tecla después de cada importación posterior para darnos la oportunidad de verificar manualmente los detalles y observar cualquier problema.
Simon Blackbourn
1
solo porque necesitaba que el ID del archivo adjunto se conectara a otra publicación, esta es una buena manera de hacerlo
axel
3

La respuesta de John es correcta: usando media_sideload_image, solo tenga en cuenta que es posible que necesite requerir estos scripts antes si no lo hace dentro del contexto de WP Admin:

require_once(ABSPATH . 'wp-admin/includes/media.php');
require_once(ABSPATH . 'wp-admin/includes/file.php');
require_once(ABSPATH . 'wp-admin/includes/image.php');

Ver https://codex.wordpress.org/Function_Reference/media_sideload_image#Notes

bryceadams
fuente