Ottieni immagini a livello di codice tramite URL e salvale nella cartella dei caricamenti


14

Sono coinvolto in una grande migrazione da un altro CMS a WordPress. Abbiamo una copia del database e abbiamo scoperto come estrarre il contenuto e creare programmaticamente messaggi WordPress da esso usando un'istanza della wpdbclasse.

Tuttavia, ci sono un paio di migliaia di immagini che vorremmo trasferire automaticamente, generare le varie dimensioni e quindi allegare ai post, per risparmiare circa una settimana di lavoro!

Esiste un modo per ottenere un'immagine da un sito remoto tramite URL e salvarla nella mia cartella wp-uploads? Immagino che questo usi, wp_httpma non ho familiarità con quello.

Una volta che ho ottenuto l'immagine e l'ho salvata, sto bene come posso quindi utilizzare wp_generate_attachment_metadataper creare le varie dimensioni e wp_insert_attachmentper allegarlo a un post.

Grazie Simone

Risposte:


29

In realtà c'è una grande funzione che farà tutte e tre queste cose per te:

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

Il primo argomento è l'URL remoto dell'immagine che si desidera scaricare. Il secondo argomento è l'ID post del post a cui si desidera allegare l'immagine. Il terzo argomento è facoltativo, ma sarà una descrizione se incluso.

Suggerirei di trovare un modo per limitare i download in modo da non mantenere il timeout, ad esempio limitando il numero di immagini che carica per carico e impostando l'importatore per aggiornarsi tra i download o utilizzando AJAX per eseguirli alla volta in modo asincrono.


1
è assolutamente fantastico john, grazie mille - funziona perfettamente. il throttling non è un problema in quanto l'ho impostato per attendere la pressione di un tasto dopo ogni importazione di post per darci la possibilità di controllare manualmente i dettagli e notare quelli problematici.
Simon Blackbourn,

1
solo perché avevo bisogno che l'ID dell'allegato fosse collegato a un altro post, ecco un buon modo per farlo
axel

3

La risposta di John è corretta per quanto riguarda: usando media_sideload_image, basta notare che potresti aver bisogno di questi script prima se non lo stai facendo nel contesto di 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');

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

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.