# Установка миниатюры для поста в WordPress
Функция set_post_thumbnail() позволяет установить миниатюру (изображение) для поста в WordPress.
## Использование функции
Функция используется для обновления метаданных поста. В частности, она обновляет или удаляет ID миниатюры поста.
### Возвращаемое значение
Функция возвращает одно из следующих значений:
- int: ID метаданных поста, если ключ не существовал (то есть миниатюра устанавливается впервые)
- true: если обновление прошло успешно
- false: если произош��а ошибка или переданное значение уже равно тому, что находится в базе данных.
### Синтаксис
```php
set_post_thumbnail( $post, $thumbnail_id );
$post(обязательный): ID поста или объект поста, к которому будет прикреплена миниатюра.$thumbnail_id(обязательный): ID миниатюры, которую нужно установить.
Примеры использования
Пример 1: Установка миниатюры для поста
Предположим, мы хотим установить миниатюру для поста с ID 56, а ID медиафайла (вложения) - 89:
$post_id = 56;
$attach_id = 89;
$set_thumb = set_post_thumbnail( $post_id, $attach_id );
if( $set_thumb ) {
echo 'Миниатюра установлена.';
} else {
echo 'Миниатюра удалена.';
}
Пример 2: Автоматическая установка миниатюры при сохранении поста
Этот код автоматически устанавливает миниатюру поста при его сохранении, если у него её нет. Он берет первое изображение, прикрепленное к посту.
add_action( 'future_to_publish', 'autoset_featured' );
add_action( 'draft_to_publish', 'autoset_featured' );
add_action( 'new_to_publish', 'autoset_featured' );
add_action( 'pending_to_publish', 'autoset_featured' );
add_action( 'save_post', 'autoset_featured' );
function autoset_featured() {
global $post;
// Проверяем, есть ли уже миниатюра поста
if( has_post_thumbnail( $post->ID ) )
return;
$attached_image = get_children( [
'post_parent' => $post->ID,
'post_type' => 'attachment',
'post_mime_type' => 'image',
'numberposts' => 1,
'order' => 'ASC',
] );
// Проверяем наличие изображения
if( $attached_image ) {
foreach( $attached_image as $attachment_id => $attachment ) {
set_post_thumbnail($post->ID, $attachment_id);
}
}
}
Пример 3: Программная установка загруженного изображения в качестве миниатюры
Этот код позволяет загружать файл изображения и устанавливать его в качестве миниатюры поста:
// $file - путь к загруженному файлу
// $filename - имя файла
$upload_file = wp_upload_bits( $filename, null, @file_get_contents( $file ) );
if( ! $upload_file['error'] ) {
// Если загрузка успешна, добавляем файл в медиатеку
$wp_filetype = wp_check_filetype( $filename, null );
$attachment = [
'post_mime_type' => $wp_filetype['type'],
'post_parent' => $post_id,
'post_title' => preg_replace( '/.[^.]+$/', '', $filename ),
'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 );
}
}
Изменения
- С версии 3.1.0 эта функция была добавлена в WordPress.
Код функции
Вот как выглядит исходный код функции set_post_thumbnail() в WordPress 6.7.2:
function set_post_thumbnail( $post, $thumbnail_id ) {
$post = get_post( $post );
$thumbnail_id = absint( $thumbnail_id );
if ( $post && $thumbnail_id && get_post( $thumbnail_id ) ) {
if ( wp_get_attachment_image( $thumbnail_id, 'thumbnail' ) ) {
return update_post_meta( $post->ID, '_thumbnail_id', $thumbnail_id );
} else {
return delete_post_meta( $post->ID, '_thumbnail_id' );
}
}
return false;
}
Теперь вы знаете, как устанавливать миниатюры для постов в WordPress. Эти примеры помогут вам реализовать эту функциональность в своих проектах.