Adăugarea imaginii reprezentative (thumbnail) la un articol inserat programatic

5 apr. 2013, 20:03:19
Vizualizări: 18.5K
Voturi: 5

Vreau să inserez un articol programatic, iată codul pentru a adăuga unul:

global $user_ID;
$new_post = array(
    'post_title' => 'Articolul meu nou',
    '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);

Cum să adaug o imagine reprezentativă articolului și să o activez pentru testare?

1
Comentarii

Ce înțelegi prin declanșarea lui pentru testare?

Sunyatasattva Sunyatasattva
5 apr. 2013 20:33:18
Toate răspunsurile la întrebare 3
7

Miniatura articolului este salvată ca meta-informație a articolului cu cheia: _thumbnail_id. Deci, după ce inserezi articolul și obții ID-ul articolului, poți seta meta-informația pentru acel articol. $thumbnail_id este doar ID-ul imaginii pe care dorești să o setezi ca miniatura, depinde de tine deoarece din întrebarea ta nu pot să deduc ce ar trebui să fie acesta.

global $user_ID;
$new_post = array(
    'post_title' => 'Articolul meu nou',
    'post_content' => 'Lorem ipsum dolor sit amet...',
    'post_status' => 'publicat',
    'post_date' => date('Y-m-d H:i:s'),
    'post_author' => $user_ID,
    'post_type' => 'articol',
    '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
Comentarii

Cum pot testa acest cod? Dacă îl transform într-o funcție, atunci unde ar trebui să o apelez?

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

Nu știu. Ideea mea a fost doar să te anunț că poți actualiza metadatele postului după cum inserezi postul.

helgatheviking helgatheviking
7 apr. 2013 21:47:59

Funcția de thumbnail pentru post va găsi automat orice metadate care conțin imagine!

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

Nu asta ai întrebat. Ai întrebat cum să setezi programatic o miniatură pentru postare atunci când inserezi un articol. Faci asta prin setarea cheii meta _thumbnail_id pentru acea postare. Dacă nu la asta te refereai, atunci te rog să revizuiești întrebarea pentru claritate.

helgatheviking helgatheviking
9 apr. 2013 12:23:29

Atunci care este rostul funcției update_post_meta, dacă funcția de miniatură a postării nu poate prelua imaginea din ea!

10wtaylor 10wtaylor
9 apr. 2013 14:09:03

Ce? Cheia meta _thumbnail_id este exact ceea ce folosește funcția the_post_thumbnail() pentru a prelua ID-ul miniatu-rii. Poți verifica acest lucru în wp-includes/post-thumbnail-template.php

helgatheviking helgatheviking
9 apr. 2013 14:35:54

Mulțumesc Helga, exact asta spuneam și eu în comentariul anterior.

10wtaylor 10wtaylor
9 apr. 2013 15:39:16
Arată celelalte 2 comentarii
0

folosește funcția set_post_thumbnail,

//$file este calea către fișierul încărcat (de exemplu, din array-ul $_FILE trimis prin formular)
//$filename este numele fișierului
//mai întâi trebuie să încărcăm fișierul în directorul de upload al WordPress
$upload_file = wp_upload_bits($filename, null, @file_get_contents($file));
if(!$upload_file['error']) {
  //dacă încărcarea a reușit, inserăm fișierul nou în biblioteca media (creăm un nou post de tip 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)) {
     //dacă postul de tip attachment a fost creat cu succes, îl setăm ca imagine reprezentativă pentru postul $post_id
     require_once(ABSPATH . "wp-admin" . '/includes/image.php');
     //wp_generate_attachment_metadata( $attachment_id, $file ); pentru imagini
     $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 iun. 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 );

Pentru mai multe informații, consultați acest link: https://developer.wordpress.org/reference/functions/wp_insert_attachment/

5 apr. 2013 20:43:14
Comentarii

acest lucru va încărca doar un fișier în biblioteca media și îl va atașa la articol, dar nu va actualiza efectiv miniatura articolului.

Aurovrata Aurovrata
20 ian. 2021 13:16:06