Програмно отримуйте зображення за 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
тільки тому, що мені потрібен ідентифікатор вкладеного файлу для підключення до іншої посади, ось хороший спосіб зробити це
axel

3

Відповідь Джона правильна: використовуючи media_sideload_image, просто зауважте, що вам, можливо, знадобиться вимагати цих сценаріїв раніше, якщо ви цього не робите в контексті адміністратора WP:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.