web-dev-qa-db-fra.com

Programmez des images par URL et enregistrez-les dans le dossier de téléchargement

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 utiliser wp_generate_attachment_metadata pour créer les différentes tailles et wp_insert_attachment pour la joindre à un message.

Merci simon

13
Simon Blackbourn

Il y a en fait une excellente fonction 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 facultatif, mais sera une description s'il est inclus.

Je suggérerais de trouver un moyen de limiter les téléchargements pour 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 les faire un à la fois de manière asynchrone.

27
John P Bloch

La réponse de John est correcte concernant l'utilisation de media_sideload_image, mais notez que vous devrez peut-être déjà utiliser ces scripts 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 https://codex.wordpress.org/Function_Reference/media_sideload_image#Notes

2
bryceadams