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

14

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 trouvé comment extraire le contenu et créer par programmation des articles WordPress à partir de celle-ci en utilisant une instanciation de la wpdbclasse.

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

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

Une fois que j'ai l'image et que je l'ai enregistrée, je vais bien car je peux ensuite l'utiliser wp_generate_attachment_metadatapour créer les différentes tailles et la wp_insert_attachmentjoindre à un message.

Merci Simon

Simon Blackbourn
la source

Réponses:

29

Il y a en fait une excellente fonction qui fera les 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 attacher 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 afin que vous ne perdiez pas de temps, comme limiter le nombre d'images qu'il tire par chargement et paramétrer l'importateur pour qu'il se rafraîchisse entre les téléchargements, ou utiliser AJAX pour les faire un à la fois de manière asynchrone.

John P Bloch
la source
1
c'est absolument fantastique john, merci beaucoup - cela fonctionne parfaitement. la limitation n'est pas un problème car je l'ai configuré pour attendre une pression de touche après chaque importation de post pour nous donner une chance de vérifier manuellement les détails et de noter les problèmes.
Simon Blackbourn
1
juste parce que j'avais besoin de l'identifiant de la pièce jointe pour être connecté à un autre poste, voici une bonne façon de le faire
axel
3

La réponse de John est correcte: utilisation media_sideload_image, notez simplement que vous devrez peut-être exiger 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 https://codex.wordpress.org/Function_Reference/media_sideload_image#Notes

bryceadams
la source