Программно получить изображения по URL и сохранить в папке загрузки

14

Я участвую в большой миграции с другой CMS на WordPress. У нас есть копия базы данных, и мы разработали, как извлечь содержимое и программно создать из него записи WordPress, используя создание экземпляров wpdbкласса.

Тем не менее, есть пара тысяч изображений, которые мы хотели бы перетаскивать автоматически, генерировать различные размеры, а затем прикреплять к сообщениям, чтобы сэкономить около недели работы!

Есть ли способ получить изображение с удаленного сайта по URL и сохранить его в папке wp-uploads? Я предполагаю, что это использует, wp_httpно я незнаком с этим.

После того как я получил изображение и сохранил его, я в порядке, так как я могу использовать его wp_generate_attachment_metadataдля создания различных размеров и wp_insert_attachmentприкрепить его к сообщению.

Спасибо Саймон

Саймон Блэкборн
источник

Ответы:

29

На самом деле есть отличная функция, которая сделает все три вещи за вас:

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

Первый аргумент - это удаленный URL-адрес изображения, которое вы хотите загрузить. Второй аргумент - это идентификатор сообщения, к которому вы хотите прикрепить изображение. Третий аргумент не является обязательным, но будет описанием, если оно включено.

Я бы посоветовал найти способ ограничить загрузки, чтобы не затягивать время ожидания, например, ограничить количество загружаемых изображений на одну загрузку и настроить импортер на самообновление между загрузками или использовать AJAX для их выполнения. в то время, асинхронно.

Джон П Блох
источник
1
это просто фантастика, Джон, спасибо тебе большое - все работает отлично. регулирование не является проблемой, так как я настроил его на ожидание нажатия клавиши после каждого импорта записей, чтобы дать нам возможность вручную проверить детали и отметить любые проблемные.
Саймон Блэкборн
1
просто потому, что мне нужно, чтобы идентификатор приложения был подключен к другому сообщению, вот хороший способ сделать это
аксель
3

Ответ Джона верен: используя media_sideload_image, просто обратите внимание, что вам может потребоваться эти сценарии раньше, если вы не делаете это в контексте 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');

См. Https://codex.wordpress.org/Function_Reference/media_sideload_image#Notes

bryceadams
источник