web-dev-qa-db-fra.com

download_url () apparaît sous forme d'icônes grises

J'essaie de télécharger des images d'url de différents sites Web avec la commande download_url($url, $timeout) pour les obtenir dans la médiathèque. Et après, je fais un wp_handle_sideload($file, $overrides).

$temp_file = download_url( $url, 5 );
$file = array(
     'name'     => basename($url),
     'type'     => 'image/jpg',
     'tmp_name' => $temp_file,
     'error'    => 0,
     'size'     => filesize($temp_file),
);
$overrides = array(
     'test_form' => false,
     'test_size' => true,
);
// Move the temporary file into the uploads directory
$results = wp_handle_sideload( $file, $overrides );

Le fichier est téléchargé correctement, mais apparaît sous la forme d'une icône grise dans la bibliothèque. Mais si j'ouvre le fichier avec le lien, l'image est ok.

grey icons

Est-ce la bonne méthode pour télécharger des images? Une fois le téléchargement terminé, je souhaite associer le support multimédia à un message. Je pense avec les fonctions wp_insert_attachment() et set_post_thumbnail().

Merci

1
DSX

Lorsque la fonction wp_handle_sideload est utilisée, comme l'a souligné @xvilo dans un commentaire, il ne crée pas les métadonnées que wordpress doit afficher pour afficher l'image dans la médiathèque. Comme je ne vois pas où la fonction wp_handle_sideload écrit les données dans la base de données, je ne comprends pas pourquoi les fichiers sont affichés dans votre médiathèque. Donc, avec votre approche, il vous manque un appel à wp_insert_attachment (comme vous l'avez dit vous-même) et à wp_generate_attachment_metadata.

$temp_file = download_url( $url, 5 );
$file = array(
     'name'     => basename($url),
     'type'     => 'image/jpg',
     'tmp_name' => $temp_file,
     'error'    => 0,
     'size'     => filesize($temp_file),
);
$overrides = array(
     'test_form' => false,
     'test_size' => true,
);
// Move the temporary file into the uploads directory
$results = wp_handle_sideload( $file, $overrides );

// Write attachment to db
$attachment = [
    'post_title' => basename($results['file']),
    'post_content' => '',
    'post_status' => 'inherit',
    'post_mime_type' => $results['type'],
];
$attachment_id = wp_insert_attachment( $attachment, $results['file'] )

// Generate the attachment's meta data
wp_generate_attachment_metadata( $attachment_id, $results['file'] );

Ou vous pouvez simplement utiliser la fonction media_handle_sideload , car cette fonction le fait déjà pour vous.

$attachment_id = media_handle_sideload( $file_array, 0 );

Après cela, vous pouvez utiliser

set_post_thumbnail( $post, $attachment_id );
2
DRogueRonin