REST API를 사용하여 미디어 업로드


9

JSON REST API를 사용하여 미디어를 WordPress 사이트에 업로드 할 때 문제가 있습니다.

다음 코드를 사용하면 사진을 업로드 할 수 있지만 이름은 물론 정보도 할당되지 않습니다. 실제로 이름은 자동으로 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로 데이터를 보낼 자신. 인용구

– @Dan (삭제 된) 답변에 언급 된 GitHub 문제에 대한 Ryan의 인용 입니다.

이미지를 측면으로 올리는 방법

점을 유의 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 API를 제공하면서도 안전하고 디버깅 가능하며 사용하기 쉽다는 것을 의미합니다. 의 반환 값 은의 결과이며 , 가능한 모든 위치를 고려하고 (많음이 있음) 위치를 쓸 수 있는지 확인합니다 . 는 필요한 모든 첨부 파일 데이터 및 메타 데이터를 생성합니다.wp_safe_remote_get()\WP_HTTP::get()download_url()wp_tempnam()/tmpmedia_handle_sideload()


인용 된 질문은 무엇입니까? 이 방법이 여전히 유효합니까?
— Brethlosze

인용문의 업데이트 및 GitHub – 이슈 링크를 참조하십시오. 왜 유효하지 않습니까? 다시 확인하려면 내부 의 라인을 따라 토끼 구멍을 따라 아래로 연결된 현재 WP 버전을 비교하십시오. 그렇게 어렵지 않습니다.
— 카이저

이 답변은 2016 년입니다. 2019 년 현재 REST API가 파일을 media객체에 업로드하는 것을 처리 할 수 ​​없으므로 WP 함수에 집중할 수 있는지 확인하고 싶습니다 .
— Brethlosze

@Brethlosze : 내가 말한 것처럼 핵심 코드를 둘러보십시오. 지금 당장 WP로 작업하지 않으므로 해당 주제에 대한 새로운 정보가 없습니다.
— 카이저
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.