Intereting Posts
Безопасно ли зарегистрировать таксономию без использования каких-либо крючков? как не показывать плагин в области администратора Установите ссылку на ссылку для загрузки мультимедиа на none и скройте ее в WP v3.5 уникальный идентификатор для тех же страниц в многоязычном контексте Изменение массива выбранных изображений в медиамодулях Hook Widget для Woo Theme в functions.php Проблемы с несколькими входами Используйте поле выбора, чтобы изменить переменную php Объединение запросов WordPress Post (пользовательские сообщения типа и категории) Пользовательские поля comment_form не отображаются Показать сообщения в трех столбцах по категориям Выполнять действия по публикации или обновлению? Уведомление, когда левая панель меню закрыта? Добавление пользовательских метабокс в пользовательские страницы как получить доступ к нижнему колонтитулу CI в теге WP footer?

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

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

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

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

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

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

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

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

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

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

Ответ Джона верен: используйте 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