Завантаження медіа за допомогою API REST


9

У мене виникають проблеми при завантаженні медіа на сайт WordPress за допомогою JSON REST API.

За допомогою наступного коду я можу завантажувати фотографії, але жодна інформація їм не присвоюється, навіть ім’я - адже ім’я автоматично стає URL-адресою та назвою файлу (без розширення).

$username = "ZX";
$password = "ZX";
$host = 'http://ZX.com/wp-json/wp/v2/media';
$data = json_encode($data);
$file = '/Users/xx.png';
$imagedata  = file_get_contents($file);
$process = curl_init($host); 
curl_setopt($process, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($process, CURLOPT_BINARYTRANSFER, TRUE);
curl_setopt($process, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($process, CURLOPT_TIMEOUT, 50);
curl_setopt($process, CURLOPT_USERPWD, $username . ":" . $password);
curl_setopt($process, CURLOPT_POSTFIELDS, $data);
curl_setopt($process, CURLOPT_HTTPHEADER, array('Content-Type:image/png','Content-Disposition:attachment;filename='.$file));
$return = curl_exec($process);
print_r($return);

Як я можу призначити дані, такі як наступні, для завантажень?

$data = array(
  "status" => "draft",
  "title" => "Photo media",       
  "description" => "Photo media1",
  "media_type" => "image",
  "alt_text" => "alternate text"
  );

Відповіді:


3

Це неможливо через API; вам потрібно отримати зображення самостійно та відправити дані в API самостійно. Блок-котирування

- Це цитує Райана на GitHub – питання, згаданий у відповіді @Dan (видалено).

Як бік завантажувати зображення

Зауважте, що media_sideload_image()повернене значення може бути і екземпляром \WP_Error. Тоді вам просто потрібно прикріпити його до посади, що досить просто:

$media = media_sideload_image( 
    'http://i.imgur.com/bcJvAj0.jpg', 
    $post->ID, 
    'Some image description', 
    'src'
);

if ( ! empty( $media ) and ! is_wp_error( $media ) ) {
    // reference new image to set as featured
    $attachments = get_posts( [
        'post_type'      => 'attachment',
        'posts_per_page' => 1,
        'post_status'    => 'any',
        'post_parent'    => $post->ID,
    ] );

    if ( is_array( $attachments ) ) {
        set_post_thumbnail( $post->ID, $attachments[0]->ID );
    }

    // Test print our image. The return value is the src of the sideloaded image.
    printf( '<img src="%s" />', $media );
}

Внутрішні

Короткий зворотний слід через серцевину, який пояснює, чому слід дотримуватися API:

Погляньте на джерело, media_sideload_image()щоб побачити, як воно використовує download_url()внутрішньо, яке використовує wp_safe_remote_get(), обгортку для \WP_HTTP::get(). Це означає, що він пропонує весь API WP, при цьому він є досить безпечним, налагоджуваним та простим у використанні. Повернене значення download_url()- результат wp_tempnam(), який враховує всі можливі /tmpмісця (їх є багато) і гарантує, що ваше місцезнаходження можна записати . media_handle_sideload()Проведе всі необхідні дані вкладень і мета - дані.


Яке цитоване питання? Чи все-таки цей метод діє?
Brethlosze

Дивіться оновлення та посилання GitHub – Issue у цитаті. І чому це не було б дійсним? Якщо ви хочете перевірити ще раз, просто слідкуйте за кролячим отвором по лінії внутрішніх та порівняйте поточну версію WP – версії з кодом, зв'язаним тут. Це не так складно.
кайзер

Оскільки ця відповідь з 2016 року, я просто хочу переконатися, що станом на 2019 рік API REST не може займатися завантаженням файлів в mediaоб’єкти, отже, можна зосередитись на функціях WP.
Brethlosze

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