Obtenir par programme les images par URL et les enregistrer dans le dossier de téléchargement

12

Je suis impliqué dans une migration importante d'un autre CMS vers WordPress. Nous avons une copie de la base de données et avons découvert comment extraire le contenu et créer par programme des publications WordPress à l'aide d'une instanciation de la classe wpdb .

Cependant, il y a quelques milliers d'images que nous voudrions voir automatiquement, générer les différentes tailles, puis les joindre aux messages, pour économiser environ une semaine de travail!

Existe-t-il un moyen de récupérer une image d'un site distant par URL et de l'enregistrer dans mon dossier wp-uploads? Je suppose que cela utilise wp_http mais je ne suis pas familier avec cela.

Une fois que l'image est enregistrée et sauvegardée, tout va bien. Je peux ensuite utiliser wp_generate_attachment_metadata pour créer les différentes tailles et wp_insert_attachment pour la joindre à un message.

Merci Simon

    
posée Simon Blackbourn 18.03.2011 - 15:41

2 réponses

24

Il existe en fait une fonction géniale qui fera ces trois choses pour vous:

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

Le premier argument est l'URL distante de l'image que vous souhaitez télécharger. Le deuxième argument est l'identifiant du message auquel vous souhaitez associer l'image. Le troisième argument est optionnel, mais sera une description s’il est inclus.

Je suggérerais de trouver un moyen de limiter les téléchargements afin de ne pas perdre de temps, par exemple en limitant le nombre d'images qu'il extrait par charge et en laissant l'importateur se rafraîchir entre les téléchargements, ou en utilisant AJAX pour faites-les un à la fois de manière asynchrone.

    
réponse donnée John P Bloch 18.03.2011 - 15:56
1

La réponse de John est correcte en ce qui concerne media_sideload_image . Notez que vous devrez peut-être utiliser ces scripts avant si vous ne le faites pas dans le contexte 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');

Voir enlace

    
réponse donnée bryceadams 24.08.2016 - 10:47

Lire d'autres questions sur les étiquettes