Tải lên phương tiện với API REST


9

Tôi gặp sự cố khi tải phương tiện lên trang web WordPress với API JSON REST.

Với đoạn mã sau tôi có thể tải lên các bức ảnh, nhưng không có thông tin nào được gán cho chúng, thậm chí cả tên - thực tế, tên sẽ tự động trở thành URL và tên tệp (không có phần mở rộng).

$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);

Làm cách nào để tôi gán dữ liệu, như sau, cho các video tải lên?

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

Câu trả lời:


3

Điều này là không thể thông qua API; bạn cần tự tìm nạp hình ảnh và tự gửi dữ liệu tới API . Blockquote

- Điều này trích dẫn Ryan về vấn đề GitHub, được đề cập trong câu trả lời @Dan (đã xóa).

Làm thế nào để tải hình ảnh bên

Lưu ý rằng media_sideload_image()giá trị trả về cũng có thể là một ví dụ \WP_Error. Sau đó, bạn chỉ cần đính kèm nó vào một bài đăng, khá đơn giản:

$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 );
}

Nội bộ

Một dấu vết ngắn thông qua lõi giải thích lý do tại sao bạn nên gắn bó với API:

Hãy xem nguồn gốc media_sideload_image()để thấy nó sử dụng download_url()nội bộ, trong đó sử dụng wp_safe_remote_get(), một trình bao bọc cho \WP_HTTP::get(). Điều này có nghĩa là nó cung cấp toàn bộ API WP trong khi khá an toàn, có thể gỡ lỗi và dễ sử dụng. Giá trị trả về download_url()là kết quả của wp_tempnam(), trong đó đưa tất cả các /tmpvị trí có thể vào tài khoản (có rất nhiều) và đảm bảo vị trí của bạn có thể ghi được . Các media_handle_sideload()sẽ tạo ra tất cả dữ liệu tập tin đính kèm cần thiết và dữ liệu meta.


Đó là câu hỏi được trích dẫn? Phương pháp này có còn hiệu lực không?
Brethlosze

Xem cập nhật và liên kết Vấn đề GitHubọt trong trích dẫn. Và tại sao nó không hợp lệ? Nếu bạn muốn kiểm tra lại, chỉ cần theo dõi lỗ thỏ dọc theo dòng của Nội bộ và so sánh phiên bản WPTHER hiện tại với mã được liên kết tại đây. Điều đó không khó lắm.
kaiser

Bởi vì câu trả lời này là từ năm 2016. Tôi chỉ muốn đảm bảo rằng kể từ năm 2019, API REST không thể xử lý việc tải tệp lên các mediađối tượng, do đó người ta có thể tập trung vào các chức năng WP.
Brethlosze

@Brethlosze như tôi đã nói: Xin hãy xem cho mình xung quanh mã lõi. Tôi không có bất kỳ thông tin mới nào về chủ đề đó vì hiện tại tôi không làm việc với WP.
kaiser
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.