Enviando mídia com a API REST

9

Estou com problemas ao carregar mídia em um site do WordPress com a API REST JSON.

Com o seguinte código, posso enviar as fotos, mas nenhuma informação é atribuída a elas, nem mesmo o nome - na verdade, o nome se torna automaticamente o URL e o nome do arquivo (sem a extensão).

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

Como eu atribuir dados, como o seguinte, aos envios?

$data = array(
  "status" => "draft",
  "title" => "Photo media",       
  "description" => "Photo media1",
  "media_type" => "image",
  "alt_text" => "alternate text"
  );
    
por Diario de Morelia 11.06.2016 / 05:16

1 resposta

3
  

Isso não é possível por meio da API; você precisa buscar a imagem você mesmo e enviar os dados para a API .   Blockquote

- Isso cita Ryan sobre o assunto mencionado em @Dan answer.

Como carregar imagens de lado

Observe que o valor de retorno media_sideload_image() também pode ser uma instância de \WP_Error . Você só precisa anexá-lo a uma postagem, o que é bastante simples:

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

Os internos

Um breve rastreio do núcleo que explica por que você deve ficar com a API:

Dê uma olhada na fonte de media_sideload_image() para ver se usa download_url() internamente, que usa wp_safe_remote_get() , um wrapper para \WP_HTTP::get() . Isso significa que oferece toda a API do WP, sendo bastante seguro, depurável e fácil de usar. O valor de retorno de download_url() é o resultado de wp_tempnam() , que usa todos os possíveis /tmp locais em conta (existem muitas) e garante que sua localização seja gravável . O media_handle_sideload() gerará todos os dados e metadados de anexos necessários.

    
por kaiser 12.06.2016 / 04:08