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.