J'utilise la fonction dans cette réponse à télécharger, attacher puis [set_the_post_tumbnail] [2]/image sélectionnée à un article que je crée à partir d'un Flux RSS.
J'ai effectué un test et le résultat indique que l'ID de pièce jointe correspond à mon ID de vignette. J'ai vérifié dans la médiathèque et il attribue les identifiants corrects en fonction de get_post_thumbnail_id mais le problème est la méta-boîte de mon image sélectionnée n’affiche pas l’image par le biais du tableau de bord ou lors de l’utilisation de [obtenir la vignette du message] [4] dans mon modèle.
Est-ce que je manque des étapes ici? Le code provient principalement de la réponse liée ci-dessus avec quelques tests à la fin.
global $wp_query;
wp_insert_post($my_post); // create a new post
$post_id = $wp_query->post->ID; // get the ID for the new post
$image_url = $thumbnail;
$upload_dir = wp_upload_dir();
$image_data = file_get_contents($image_url);
$filename = basename($image_url);
if(wp_mkdir_p($upload_dir['path']))
$file = $upload_dir['path'] . '/' . $filename;
else
$file = $upload_dir['basedir'] . '/' . $filename;
file_put_contents($file, $image_data);
$wp_filetype = wp_check_filetype($filename, null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_title' => sanitize_file_name($filename),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $file, $post_id );
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $file );
wp_update_attachment_metadata( $attach_id, $attach_data );
set_post_thumbnail( $post_id, $attach_id );
echo "Attachment ID: " . $attach_id;
$post_thumbnail_id = get_post_thumbnail_id( $post_id );
echo "Thumbnail ID: " . $post_thumbnail_id;
get_the_post_thumbnail($post_id, 'full');
Au lieu de
wp_insert_post($my_post); // create a new post
$post_id = $wp_query->post->ID; // get the ID for the new post
essaye ça:
$post_id = wp_insert_post($my_post); // create a new post
pour obtenir l'ID de poste inséré.