Как загрузить файл с внешнего api ? wordpress
Всем привет!Получаю по внешнему API файлы документов с описанием и ссылкой на загрузку файла в формате JSON. Подскажите, как мне документы сохранить в wordpress ? Также я создаю с помощью wp_inset_post посты,в которые данные сохраняю с api и каждому посту нужно прикрепить свой документ. Как мне этот документ сохранить в wordPress и пробросить через wp_insert_post не понимаю... Создание постов выглядит так:
$rules_id = $item->id;//id
$rules_status = $item->status;
$rules_title = $item->title . ' ' . 'id ' . $rules_id; //Заголовок поста
$my_post = array(
'post_title' => $rules_title,
'post_status' => 'publish',
'post_type' => 'post',
'post_category' => array(63)
);
$post_id = wp_insert_post($my_post);
wp_set_object_terms($post_id, array($rules_status), 'post_tag', false);
Ответы (1 шт):
Для загрузки файлов в WordPress используется функция media_handle_sideload(). Она качает файл в директорию загрузок и создает соответствующий объект вложения в БД. По коду я не понял где ссылка на файл. Поэтому предположим, что есть переменная $file_url, которая содержит прямую ссылку. Дальше качаем с media_handle_sideload() и крепим к посту wp_insert_post().
Примерный код:
$rules_id = $item->id; // id
$rules_status = $item->status;
$rules_title = $item->title . ' ' . 'id ' . $rules_id; // Заголовок поста
$file_url = $item->file_url; // URL файла для загрузки, ибо не увидел в вашем коде
$my_post = array(
'post_title' => $rules_title,
'post_status' => 'publish',
'post_type' => 'post',
'post_category' => array(63)
);
$post_id = wp_insert_post($my_post);
$tmp = download_url($file_url);
if (is_wp_error($tmp)) {
// Обработка ошибки скачивания файла тут!
} else {
$file_array = array(
'name' => basename($file_url), // Задаём имя файла
'tmp_name' => $tmp // Путь к временному файлу
);
$id = media_handle_sideload($file_array, $post_id);
if (is_wp_error($id)) {
@unlink($file_array['tmp_name']); // Если не вышло скачать, удаляем временный файл
} else {
// Если файл успешно загружен, прикрепляем к посту
update_post_meta($post_id, 'attached_file_id', $attachment_id);
// предварительно надо создать мета-поле attached_file_id
}
}