Fazendo upload de mídia com a API REST

Estou tendo problemas ao fazer o upload de mídia para um site WordPress com a API JSON REST.

Com o seguinte código, eu posso carregar as fotos, mas nenhuma informação é atribuída a elas, nem mesmo o nome – de fato, o nome automaticamente se torna 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 atribui dados, como o seguinte, aos uploads?

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

Solutions Collecting From Web of "Fazendo upload de mídia com a API REST"

Isso não é possível através da API; você precisa buscar a imagem você mesmo e enviar os dados para a própria API . Bloco de citação

– Esta cita Ryan sobre o assunto mencionado na resposta @Dan.

Como carregar imagens de carga lateral

Observe que o valor de retorno media_sideload_image() 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( '', $media ); } 

Os internos

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

Dê uma olhada na fonte de media_sideload_image() para ver isso usando download_url() internamente, que usa wp_safe_remote_get() , um wrapper para \WP_HTTP::get() . Isso significa que ele oferece toda a API WP enquanto é bastante seguro, devolvível e fácil de usar. O valor de retorno de download_url() é o resultado de wp_tempnam() , que leva todas as posições possíveis /tmp em conta (há abundância) e garante que sua localização seja gravável . O media_handle_sideload() gerará todos os dados e metadados de anexos necessários.