web-dev-qa-db-fra.com

Téléchargement de média avec le REST API

Je rencontre des difficultés lors du téléchargement de contenu multimédia sur un site WordPress avec l'API JSON REST.

Avec le code suivant, je peux télécharger les photos, mais aucune information ne leur est assignée, pas même le nom - en fait, le nom devient automatiquement l'URL et le nom du fichier (sans l'extension).

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

Comment pourrais-je attribuer des données, comme celle ci-dessous, aux téléchargements?

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

Ceci n'est pas possible via l'API. vous devez récupérer l'image vous-même , et envoyer les données à l'API vous-même. Blockquote

- Ceci cite Ryan sur la question GitHub mentionnée dans la réponse @Dan (supprimé).

Comment charger des images

Notez que la valeur de retour media_sideload_image() peut également être une instance de \WP_Error. Il vous suffit ensuite de le joindre à un message, ce qui est assez 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 );
}

Les internes

Une courte trace dans le cœur qui explique pourquoi vous devez vous en tenir à l'API:

Jetez un oeil à la source de media_sideload_image() pour le voir utilise download_url() en interne, qui utilise wp_safe_remote_get() , un wrapper pour \WP_HTTP::get() . Cela signifie qu’elle offre l’ensemble WP API tout en étant relativement sûre, débogable et facile à utiliser. La valeur de retour de download_url() est le résultat de wp_tempnam() , qui prend en compte tous les emplacements /tmp possibles (il y en a beaucoup) et garantit que votre emplacement est enregistrable. Le media_handle_sideload() générera toutes les données de pièce jointe et métadonnées nécessaires.

3
kaiser