Adăugarea imaginii reprezentative (thumbnail) la un articol inserat programatic
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?

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 );

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

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

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

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.

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

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

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 );
}
}

$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/
