Obtenha programaticamente imagens por URL e salve na pasta de uploads

14

Estou envolvido em uma grande migração de outro CMS para WordPress. Temos uma cópia do banco de dados e descobrimos como extrair o conteúdo e criar programaticamente postagens do WordPress usando uma instanciação da wpdbclasse.

No entanto, existem algumas milhares de imagens que gostaríamos de exibir automaticamente, gerar os vários tamanhos e anexá-las às postagens, para economizar cerca de uma semana de trabalho!

Existe uma maneira de obter uma imagem de um site remoto por URL e salvá-la na minha pasta wp-uploads? Eu acho que isso usa, wp_httpmas eu não estou familiarizado com isso.

Depois de obter a imagem e salvá-la, estou bem, pois posso usá-la wp_generate_attachment_metadatapara criar os vários tamanhos e wp_insert_attachmentanexá-la a uma postagem.

Obrigado Simon

Simon Blackbourn
fonte

Respostas:

29

Na verdade, existe uma ótima função que fará as três coisas para você:

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

O primeiro argumento é o URL remoto da imagem que você deseja baixar. O segundo argumento é o ID da postagem à qual você deseja anexar a imagem. O terceiro argumento é opcional, mas será uma descrição, se incluído.

Sugiro que você encontre uma maneira de acelerar os downloads para que você não se limite ao tempo limite, como limitar o número de imagens capturadas por carga e definir o importador para se atualizar entre os downloads ou usar o AJAX para fazer um. por vez de forma assíncrona.

John P Bloch
fonte
1
isso é absolutamente fantástico john, muito obrigado - ele funciona perfeitamente. a limitação não é um problema, pois eu o configurei para aguardar um pressionamento de tecla após cada importação de postagem para nos dar a chance de verificar manualmente os detalhes e observar os problemáticos.
Simon Blackbourn
1
só porque eu precisava do Id do anexo a ser ligado a outro post, aqui está uma boa maneira de fazer isso
axel
3

A resposta de John está correta: re: using media_sideload_image, observe que você pode precisar desses scripts antes, se não estiver fazendo isso no contexto do 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');

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

bryceadams
fonte