Функция set_post_thumbnail()
в WordPress позволяет установить миниатюру (featured image) для конкретного поста. Эта функция является важным инструментом для управления изображениями на вашем сайте, так как позволяет улучшить визуальное представление постов и страниц. В этой статье мы подробно рассмотрим ее использование, параметры и приведем несколько практических примеров.
set_post_thumbnail( int|WP_Post $post, int $thumbnail_id ): int|bool
Описание
Функция set_post_thumbnail()
устанавливает миниатюру записи по переданным ID записи и ID вложения (медиафайла). Если указанный ID вложения отсутствует, функция удаляет миниатюру из записи.
Параметры
$post
(int | WP_Post) – ID записи или объект поста, для которого нужно установить миниатюру. Этот параметр обязателен.$thumbnail_id
(int) – ID вложения, которое необходимо прикрепить. Этот параметр также обязателен.
Возвращаемое значение
- int | bool – Функция возвращает:
- true на успех (если миниатюра установлена или данные обновлены).
- false на неудачу (если не удалось вставить данные или если миниатюра уже установлена).
Пример 1: Автоматическая установка миниатюры при сохранении поста
Этот код автоматически устанавливает миниатюру записи при ее сохранении. Если у поста еще нет миниатюры, функция будет искать первое прикрепленное изображение и устанавливать его в качестве миниатюры.
add_action( 'save_post', 'autoset_featured_thumbnail' );
function autoset_featured_thumbnail() {
global $post;
// Проверяем, есть ли миниатюра у поста
if ( has_post_thumbnail( $post->ID ) ) {
return;
}
// Получаем первое прикрепленное изображение
$attached_images = get_children( [
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'image',
'numberposts' => 1,
'order' => 'ASC',
] );
// Устанавливаем миниатюру, если изображение найдено
if ( $attached_images ) {
foreach ( $attached_images as $attachment_id => $attachment ) {
set_post_thumbnail( $post->ID, $attachment_id );
}
}
}
Пример 2: Установка миниатюры записи вручную
Допустим, вам нужно установить миниатюру для поста с ID 34, и вы знаете, что ID медиафайла (вложения) равен 22. Вот как это можно сделать:
$post_id = 34;
$attach_id = 22;
$result = set_post_thumbnail( $post_id, $attach_id );
if ( $result ) {
echo 'Миниатюра успешно установлена.';
} else {
echo 'Миниатюра не была установлена или удалена.';
}
Пример 3: Установка миниатюры после загрузки файла
Если вы хотите установить миниатюру сразу после загрузки изображения, вы можете использовать следующий код. Этот код загружает изображение и устанавливает его в качестве миниатюры для заданного поста:
function upload_and_set_thumbnail( $post_id, $file_path, $file_name ) {
// Загружаем файл в директорию загрузок WordPress
$upload_file = wp_upload_bits( $file_name, null, file_get_contents( $file_path ) );
if ( ! $upload_file['error'] ) {
// Если загрузка успешна, создаем вложение
$wp_filetype = wp_check_filetype( $file_name, null );
$attachment = array(
'post_mime_type' => $wp_filetype['type'],
'post_parent' => $post_id,
'post_title' => preg_replace( '/\.[^.]+$/', '', $file_name ),
'post_content' => '',
'post_status' => 'inherit'
);
// Вставляем вложение
$attachment_id = wp_insert_attachment( $attachment, $upload_file['file'], $post_id );
if ( ! is_wp_error( $attachment_id ) ) {
// Генерируем метаданные для вложения и обновляем их
require_once( ABSPATH . 'wp-admin/includes/image.php' );
$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 );
}
}
}
Заключение
Функция set_post_thumbnail()
является мощным инструментом для управления миниатюрами в WordPress. Она позволяет не только устанавливать изображения для постов, но и делать это автоматически при загрузке или сохранении. Используя приведенные выше примеры, вы сможете легко интегрировать установку миниатюр в вашу тему или плагин.