Добавление миниатюры записи при программной вставке поста
Я хочу программно вставить запись, вот код для добавления:
global $user_ID;
$new_post = array(
'post_title' => 'Мой новый пост',
'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);
Как добавить миниатюру записи и протестировать это?

Миниатюра записи сохраняется как метаданные записи с ключом: _thumbnail_id
. Таким образом, после вставки записи и получения её ID вы можете установить метаданные для этой записи. $thumbnail_id
— это просто ID изображения, которое вы хотите установить в качестве миниатюры, выбор за вами, так как из вашего вопроса неясно, каким оно должно быть.
global $user_ID;
$new_post = array(
'post_title' => 'Моя новая запись',
'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 );

Как я могу протестировать этот код? Если сделать его функцией, то где её следует вызывать?

Я не знаю. Я просто хотел дать вам понять, что вы можете обновить метаданные записи после того, как вставите запись.

Функция миниатюры записи автоматически найдёт любые метаданные, содержащие изображение!

Это не то, о чем вы спрашивали. Вы спрашивали, как программно установить миниатюру записи при ее вставке. Это делается путем установки мета-ключа _thumbnail_id
для этой записи. Если вы имели в виду что-то другое, пожалуйста, уточните свой вопрос.

Тогда в чем смысл функции update_post_meta, если функция миниатюры записи не может получить из нее изображение!

Что? Мета-ключ _thumbnail_id
именно то, что функция the_post_thumbnail()
использует для получения ID миниатюры. Вы можете проверить это в файле wp-includes/post-thumbnail-template.php

используйте функцию set_post_thumbnail
,
//$file - это путь к загруженному файлу (например, как указано в массиве $_FILE отправленного файла)
//$filename - имя файла
//сначала нам нужно загрузить файл в папку загрузок WordPress
$upload_file = wp_upload_bits($filename, null, @file_get_contents($file));
if(!$upload_file['error']) {
//если успешно, добавляем новый файл в медиабиблиотеку (создаем новый тип записи "вложение")
$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)) {
//если запись вложения успешно создана, добавляем его как миниатюру к записи $post_id
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
//wp_generate_attachment_metadata( $attachment_id, $file ); для изображений
$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);
Для получения дополнительной информации смотрите ссылку https://developer.wordpress.org/reference/functions/wp_insert_attachment/
