Как отключить создание миниатюр для записей?

Вопрос или проблема

В моей теме есть набор

add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 470, 680 );

который фактически генерирует еще одно изображение помимо стандартных small,medium,medium-large,large

и он установлен автором темы для конкретных целей, конечно.

Я использую wp_insert_attachment() как стандартную функцию для загрузки изображений с фронтенда. Из этого конкретного процесса я не хочу, чтобы генерировались несколько изображений.Только оригинальное изображение и эскиз изображения. Поэтому я сделал этот простой код

function test_attachment( $user_data, $values, $user_id ) {

if( isset( $values['profile']['user_avatar']['path'] ) ) {

    $filename = $values['profile']['user_avatar']['path'];
    $filetype = wp_check_filetype( basename( $filename ), null );
    $wp_upload_dir = wp_upload_dir();
    $attachment = array(
        'guid'           => $wp_upload_dir['url'] . "https://wordpress.stackexchange.com/" . basename( $filename ),
        'post_mime_type' => $filetype['type'],
        'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
        'post_content'   => '',
        'post_status'    => 'inherit'
    );


    $attach_id = wp_insert_attachment( $attachment, $filename );


    require_once( ABSPATH . 'wp-admin/includes/image.php' );
    //удалить все сгенерированные изображения и оставить только оригинальное и эскиз изображения.
    add_filter('intermediate_image_sizes_advanced', function($sizes) {
                    unset( $sizes['medium']);
                    unset( $sizes['medium_large']);
                    unset( $sizes['large']);
                    return $sizes;
        });


    $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
    wp_update_attachment_metadata( $attach_id, $attach_data );

    $previous_avatar_id = get_user_meta( $user_id, 'avatar_attachment_id', true );

    if( $previous_avatar_id ) {
        wp_delete_attachment( $previous_avatar_id );
    }

    update_user_meta( $user_id, 'avatar_attachment_id', $attach_id );

}
}  

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

unset( $sizes['post-thumbnail']);

но безуспешно.

Как возможно остановить генерацию изображения миниатюры сообщения изнутри парсера и не удаляя оригинал set_post_thumbnail_size, так как он установлен там для других конкретных целей?

Буду признателен за любые идеи.

Для этого перейдите в Настройки » Медиа и установите все значения в 0. Вот так:введите описание изображения здесь

Я допустил большую ошибку, используя

unset( $sizes['post-thumbnails']);

вместо

unset( $sizes['post-thumbnail']);

что на самом деле является названием изображения.

Ответ или решение

Для отключения генерации изображений пост-миниатюр (post-thumbnail) в WordPress, особенно если вы используете функцию wp_insert_attachment для загрузки изображений через интерфейс, вы можете воспользоваться следующим подходом.

Шаги для отключения генерации изображений пост-миниатюр

1. Использование фильтра intermediate_image_sizes_advanced

Вы уже начали с использования фильтра intermediate_image_sizes_advanced для удаления стандартных размеров изображений (medium, medium_large, large). Вам нужно добавить дополнительные операции в ваш код, чтобы отключить также создание миниатюры.

add_filter('intermediate_image_sizes_advanced', function($sizes) {
    unset($sizes['medium']);
    unset($sizes['medium_large']);
    unset($sizes['large']);
    unset($sizes['post-thumbnail']); // Удаляем создание пост-миниатюры
    return $sizes;
});

Убедитесь, что вы добавляете этот фильтр на правильном уровне вашего кода.

2. Установка параметра для wp_insert_attachment

Если вы хотите, чтобы система не создавала пост-миниатюры при загрузке через wp_insert_attachment, указывайте это преднамеренно в вашем вызове функции. Однако, поскольку стандартный вызов уже инициирует создание миниатюр, вам понадобятся дополнительные меры.

$attach_id = wp_insert_attachment($attachment, $filename);

// Убедитесь, что вы корректно включаете эту часть кода перед wp_generate_attachment_metadata
require_once(ABSPATH . 'wp-admin/includes/image.php');

// Отключаем генерацию миниатюр, добавляя этот фильтр здесь
add_filter('intermediate_image_sizes_advanced', function($sizes) {
    unset($sizes['medium']);
    unset($sizes['medium_large']);
    unset($sizes['large']);
    unset($sizes['post-thumbnail']); // Отключаем создание пост-миниатюры
    return $sizes;
});

// Генерируем метаданные, не создавая лишние размеры
$attach_data = wp_generate_attachment_metadata($attach_id, $filename);
wp_update_attachment_metadata($attach_id, $attach_data);

3. Убедитесь, что код выполняется в правильном порядке

Важно, чтобы фильтр, отключающий размеры изображений, менялся до вызовов функций, которые реагируют на него, то есть до wp_generate_attachment_metadata. В противном случае любое последующее действие может проигнорировать ваши настройки.

Замечания

  • Убедитесь, что у вас нет других плагинов или тем, которые могут переопределять ваши фильтры или вызывать генерацию миниатюр.
  • Проверьте настройки медиабиблиотеки в административной панели WordPress, чтобы не было конфликтов.
  • Тестируйте производительность вашего сайта после внесения изменений, чтобы убедиться, что они не влияют на другие стороны вашего проекта.

Итог

Эти шаги позволят вам отключить генерацию пост-миниатюр, не меняя глобальные настройки вашего сайта или темы. Такой подход поможет вам контролировать, какие размеры изображений создаются, обеспечивая при этом эффективность загрузки и обработки медиафайлов на вашем сайте.

Оцените материал
Добавить комментарий

Капча загружается...