Carga de medios con la API REST


9

Tengo problemas al subir archivos multimedia a un sitio de WordPress con la API JSON REST.

Con el siguiente código puedo subir las fotos, pero no se les asigna información, ni siquiera el nombre; de ​​hecho, el nombre se convierte automáticamente en la URL y el nombre de 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"
  );

Respuestas:


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 de GitHub mencionado en @Dan (eliminado) respuesta.

Cómo cargar imágenes laterales

Tenga en cuenta que el media_sideload_image()valor de retorno también puede ser una instancia \WP_Error. Entonces solo necesita adjuntarlo a una publicación, que 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

Un breve seguimiento a través del núcleo que explica por qué debe seguir con la API:

Eche un vistazo a la fuente de media_sideload_image()para ver si utiliza download_url()internamente, qué 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 segura, depurable y fácil de usar. El valor de retorno de download_url()es el resultado de wp_tempnam(), que tiene /tmpen cuenta todas las ubicaciones posibles (hay muchas) y se asegura de que su ubicación sea grabable . El media_handle_sideload()generará todos los datos adjuntos y metadatos necesarios.


¿Cuál es la pregunta citada? ¿Sigue siendo válido este método?
Brethlosze

Consulte la actualización y el enlace GitHub – Issue en la cotización. ¿Y por qué no sería válido? Si desea verificar nuevamente, simplemente siga por la madriguera del conejo a lo largo de las líneas internas y compare la versión actual de WP con el código vinculado aquí. Eso no es tan difícil.
kaiser

Debido a que esta respuesta es de 2016. Solo quiero asegurarme de que a partir de 2019, la API REST no pueda ocuparse de cargar archivos en mediaobjetos, por lo tanto, uno puede centrarse en las funciones de WP.
Brethlosze

@Brethlosze como dije: por favor, eche un vistazo al código central. No tengo ninguna información nueva sobre ese tema, ya que no estoy trabajando mucho con WP en este momento.
kaiser
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.