Установка миниатюры в WordPress: set_post_thumbnail() – синтаксис и примеры использования

# Установка миниатюры для поста в 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. Эти примеры помогут вам реализовать эту функциональность в своих проектах.

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *