Aggiungere un'immagine in evidenza a un post inserito programmaticamente
Voglio inserire un post programmaticamente, ecco il codice per aggiungerne uno:
global $user_ID;
$new_post = array(
'post_title' => 'Il mio nuovo post',
'post_content' => 'Lorem ipsum dolor sit amet...',
'post_status' => 'publish',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => $user_ID,
'post_type' => 'post',
'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);
Come posso aggiungere un'immagine in evidenza al post e attivarla per i test?

La miniatura del post viene salvata semplicemente come meta del post con la chiave: _thumbnail_id
. Quindi, dopo aver inserito il post e ottenuto l'ID del post, puoi impostare il meta per quel post. Il $thumbnail_id
è semplicemente l'ID dell'immagine che vuoi impostare come miniatura, sta a te decidere poiché dalla tua domanda non posso capire quale dovrebbe essere.
global $user_ID;
$new_post = array(
'post_title' => 'Il Mio Nuovo Post',
'post_content' => 'Lorem ipsum dolor sit amet...',
'post_status' => 'publish',
'post_date' => date('Y-m-d H:i:s'),
'post_author' => $user_ID,
'post_type' => 'post',
'post_category' => array(0)
);
$post_id = wp_insert_post($new_post);
if( ! is_wp_error( $post_id ) )
update_post_meta( $post_id, '_thumbnail_id', $thumbnail_id );

Come posso testare questo codice? Se lo trasformo in una funzione, dove dovrei chiamarla?

Non lo so. Il mio intento era solo farti sapere che potresti aggiornare i meta del post dopo aver inserito il post, qualunque sia il metodo che usi.

La funzione per la miniatura del post troverà automaticamente qualsiasi meta dato contenente un'immagine!

Non è quello che hai chiesto. Hai chiesto come impostare programmaticamente una miniatura del post durante l'inserimento di un post. Lo fai impostando la meta key _thumbnail_id
per quel post. Se non è questo che intendevi, per favore riformula la tua domanda per maggiore chiarezza.

Allora a cosa serve la funzione update_post_meta, se la funzione della miniatura del post non riesce a recuperare l'immagine da essa!

Eh? La meta key _thumbnail_id
è esattamente ciò che la funzione the_post_thumbnail()
utilizza per recuperare l'ID della miniatura. Puoi verificarlo in wp-includes/post-thumbnail-template.php

usa la funzione set_post_thumbnail
,
//$file è il percorso del file caricato (ad esempio come impostato nell'array $_FILE del file inviato)
//$filename è il nome del file
//prima dobbiamo caricare il file nella cartella di upload di wp.
$upload_file = wp_upload_bits($filename, null, @file_get_contents($file));
if(!$upload_file['error']) {
//se ha successo, inserisci il nuovo file nella libreria media (crea un nuovo post type di attachment)
$wp_filetype = wp_check_filetype($filename, null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_parent' => $post_id,
'post_title' => preg_replace('/\.[^.]+$/', '', $filename),
'post_content' => '',
'post_status' => 'inherit'
);
//wp_insert_attachment( $attachment, $filename, $parent_post_id );
$attachment_id = wp_insert_attachment( $attachment, $upload_file['file'], $post_id );
if (!is_wp_error($attachment_id)) {
//se il post di attachment è stato creato con successo, inseriscilo come thumbnail al post $post_id
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
//wp_generate_attachment_metadata( $attachment_id, $file ); per le immagini
$attachment_data = wp_generate_attachment_metadata( $attachment_id, $upload_file['file'] );
wp_update_attachment_metadata( $attachment_id, $attachment_data );
set_post_thumbnail( $post_id, $attachment_id );
}
}

$wp_filetype = wp_check_filetype(basename($filename), null );
$wp_upload_dir = wp_upload_dir();
$attachment = array(
'guid' => $wp_upload_dir['url'] . '/' . basename( $filename ),
'post_mime_type' => $wp_filetype['type'],
'post_title' => preg_replace('/\.[^.]+$/', '', basename($filename)),
'post_content' => '',
'post_status' => 'inherit'
);
$attach_id = wp_insert_attachment( $attachment, $filename, $post_id );
require_once(ABSPATH . 'wp-admin/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
Per maggiori informazioni consulta questo link https://developer.wordpress.org/reference/functions/wp_insert_attachment/
