Caricamento dei media con l'API REST


9

Sto riscontrando problemi durante il caricamento di file multimediali su un sito WordPress con l'API REST JSON.

Con il seguente codice posso caricare le foto, ma nessuna informazione è assegnata a loro, nemmeno il nome - infatti il ​​nome diventa automaticamente l'URL e il nome del file (senza estensione).

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

Come assegnerei i dati, come il seguente, ai caricamenti?

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

Risposte:


3

Questo non è possibile tramite l'API; devi recuperare l'immagine tu stesso e inviare tu stesso i dati all'API . blockquote

- Questo cita Ryan sulla questione GitHub menzionata nella risposta @Dan (cancellata).

Come caricare le immagini lateralmente

Si noti che anche il media_sideload_image()valore restituito può essere un'istanza \WP_Error. Devi solo collegarlo a un post, che è abbastanza semplice:

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

Gli interni

Una breve traccia indietro attraverso il core che spiega perché dovresti rimanere con l'API:

Dai un'occhiata alla fonte di media_sideload_image()per vedere che utilizza download_url()internamente, che utilizza wp_safe_remote_get(), un wrapper per \WP_HTTP::get(). Ciò significa che offre l'intera API WP pur essendo abbastanza sicura, debuggable e facile da usare. Il valore di ritorno di download_url()è il risultato di wp_tempnam(), che tiene conto di tutte le /tmpposizioni possibili (ce ne sono molte) e si assicura che la posizione sia scrivibile . Il media_handle_sideload()genererà tutti i dati degli allegati necessari e metadati.


Qual è la domanda citata? Questo metodo è ancora valido?
Brethlosze,

Vedi aggiornamento e link GitHub – Issue nel preventivo. E perché non sarebbe valido? Se vuoi ricontrollare, basta seguire la tana del coniglio lungo le linee di Gli interni e confrontare l'attuale versione di WP con il codice collegato qui. Non è così difficile.
Kaiser

Poiché questa risposta è del 2016. Voglio solo assicurarmi che a partire dal 2019, l'API REST non sia in grado di gestire il caricamento di file in mediaoggetti, quindi è possibile concentrarsi sulle funzioni di WP.
Brethlosze,

@ Brethlosze come ho detto: per favore, dai un'occhiata al codice di base. Non ho nuove informazioni su questo argomento in quanto non sto lavorando molto con WP in questo momento.
Kaiser
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.