Cargar medios con la API REST

9

Tengo problemas al cargar contenido multimedia en un sitio de WordPress con la API de REST de JSON.

Con el siguiente código puedo subir las fotos, pero no se les asigna ninguna información, ni siquiera el nombre; de hecho, el nombre se convierte automáticamente en la URL y el nombre del archivo (sin la extensión).

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

¿Cómo asignaría datos, como los siguientes, a las cargas?

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

1 respuesta

3
  

Esto no es posible a través de la API; debe buscar la imagen usted mismo y enviar los datos a la API usted mismo.   Blockquote

- Esto cita a Ryan sobre el problema mencionado en @Dan answer.

Cómo cargar imágenes de lado

Tenga en cuenta que el valor devuelto media_sideload_image() también puede ser una instancia de \WP_Error . Entonces solo debes adjuntarlo a una publicación, lo cual es bastante simple:

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

Los internos

Una breve traza hacia atrás a través del núcleo que explica por qué debes apegarte a la API:

Eche un vistazo a la fuente de media_sideload_image() para ver si usa download_url() internamente, que utiliza wp_safe_remote_get() , un contenedor para \WP_HTTP::get() . Esto significa que ofrece toda la API de WP a la vez que es bastante seguro, se puede depurar y es fácil de usar. El valor de retorno de download_url() es el resultado de wp_tempnam() , que toma todas las ubicaciones /tmp posibles en cuenta (hay muchos) y se asegura de que su ubicación sea grabable . media_handle_sideload() generará todos los datos adjuntos y los metadatos necesarios.

    
respondido por el kaiser 12.06.2016 - 04:08

Lea otras preguntas en las etiquetas