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?
10wtaylor
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.
helgatheviking
La funzione per la miniatura del post troverà automaticamente qualsiasi meta dato contenente un'immagine!
10wtaylor
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.
helgatheviking
Allora a cosa serve la funzione update_post_meta, se la funzione della miniatura del post non riesce a recuperare l'immagine da essa!
10wtaylor
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
helgatheviking
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/