Aggiungere un'immagine in evidenza a un post inserito programmaticamente

5 apr 2013, 20:03:19
Visualizzazioni: 18.5K
Voti: 5

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?

1
Commenti

Cosa intendi con attivarlo per i test?

Sunyatasattva Sunyatasattva
5 apr 2013 20:33:18
Tutte le risposte alla domanda 3
7

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 );
5 apr 2013 20:45:29
Commenti

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

10wtaylor 10wtaylor
7 apr 2013 19:25:05

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 helgatheviking
7 apr 2013 21:47:59

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

10wtaylor 10wtaylor
9 apr 2013 12:01:52

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 helgatheviking
9 apr 2013 12:23:29

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 10wtaylor
9 apr 2013 14:09:03

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 helgatheviking
9 apr 2013 14:35:54

Grazie Helga, era proprio quello che dicevo nel commento precedente.

10wtaylor 10wtaylor
9 apr 2013 15:39:16
Mostra i restanti 2 commenti
0

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 );
   }
}
13 giu 2017 17:34:46
1
-1
 $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/

5 apr 2013 20:43:14
Commenti

questo caricherà solo un file nella libreria multimediale e lo collegherà al post, tuttavia non aggiornerà effettivamente la miniatura del post.

Aurovrata Aurovrata
20 gen 2021 13:16:06