Отключение создания копий изображений в WordPress: лучшие практики

ОТКЛЮЧЕНИЕ СОЗДАНИЯ КОПИЙ ИЗОБРАЖЕНИЙ В WORDPRESS

По умолчанию WordPress создаёт четыре размера для каждого загружаемого изображения, а если изображение большое, то ещё два дополнительных. Кроме того, темы и плагины могут создавать дополнительные размеры изображений.

В итоге на вашем сайте может создаваться от 5 до 10 копий (дубликатов) каждого загруженного изображения. Это может увеличить требуемое место на диске и размер резервных файлов. Порой все эти копии действительно нужны, но на практике это происходит крайне редко! Поэтому имеет смысл отключить дополнительные размеры миниатюр. Давайте разберёмся, как это сделать.

СОДЕРЖАНИЕ

  • Когд�� нужно отключить создание копий изображений?
  • Как узнать, какие размеры используются на сайте?
  • Как найти все зарегистрированные размеры миниатюр
  • Метод 1: Команда WP-CLI
  • Метод 2: Код PHP
  • Как отключить создание копий?
    • 1 Отключение в коде

    • 2 Удаление зарегистрированных размеров через фильтр

    • 3 Отключение создания дополнительных размеров через фильтр

    • 4 Изменение или отключение *-scaled размера

    • 5 Удаление старых размеров (необходимость в файлах)

  • Заключение

КОГДА НУЖНО ОТКЛЮЧИТЬ СОЗДАНИЕ КОПИЙ ИЗОБРАЖЕНИЙ?

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

Многочисленные дубликаты uploaded фотографий, которые находятся в папке загрузок, могут значительно увеличить размер резервных файлов - это, по крайней мере, неудобно. Представьте, что вы загружаете одно изображение, а WordPress создаёт 7 миниатюр для него - 7 копий этого изображения, при этом некоторые дубликаты могут быть практически одного размера с оригиналом. Из этих 7 копий только одна используется на главной странице, и даже эта будет висеть там, пока не будет заменена следующей. Используемый файл останется на хостинге на всю жизнь, и использовался он всего один день или неделю.

Если у вас на сайте тысячи изображений, это может вызвать проблемы и сложности.

КАК УЗНАТЬ, КАКИЕ РАЗМЕРЫ ИСПОЛЬЗУЮТСЯ НА САЙТЕ?

По умолчанию WordPress создаёт следующие копии:

  1. thumbnail — миниатюра (можно изменить из админ-панели).
  2. medium — средний размер (можно изменить из админ-панели).
  3. medium_large — умеренно большой (с версии WP 4.4).
  4. large — большой (можно изменить из админ-панели).
  5. 1536x1536 — 2x medium_large (с версии WP 5.3).
  6. 2048x2048 — 2x large (с версии WP 5.3).
  7. -scaled — см. примечание.

Кроме этих размеров, дополнительные могут создаваться самой темой. Например, дополнительный размер для поста миниатюры, для постов в боковой панели или для других нужд.

Сначала вам нужно определить, сколько копий создаётся при загрузке изображения. Для этого зайдите в админ-панель и загрузите большое изображение, например, 1900x1000 пикселей (большой размер нужен, чтобы создались все возможные копии). Затем перейдите в папку загрузок вашего сайта, обычно эт��:

/wp-content/uploads/

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

КАК УЗНАТЬ ВСЕ ЗАРЕГИСТРИРОВАННЫЕ РАЗМЕРЫ МИНИАТЮР

Можно использовать несколько способов, чтобы узнать, какие размеры зарегистрированы на сайте.

МЕТОД 1: КОМАНДА WP-CLI

Запустите следующую команду в WP-CLI:

$wp media image-size

Вы получите таблицу с зарегистрированными размерами:

+---------------------------+-------+--------+-------+-------+
| name                      | width | height | crop  | ratio |
+---------------------------+-------+--------+-------+-------+
| full                      |       |        | N/A   | N/A   |
| twentyfourteen-full-width | 1038  | 576    | hard  | 173:96|
| large                     | 1024  | 1024   | soft  | N/A   |
| medium_large              | 768   | 0      | soft  | N/A   |
| medium                    | 300   | 300    | soft  | N/A   |
| thumbnail                 | 150   | 150    | hard  | 1:1   |
+---------------------------+-------+--------+-------+-------+

МЕТОД 2: КОД PHP

Добавьте следующий код в файл header.php или footer.php вашей темы:

/**
 * Получить информацию обо всех зарегистрированных размерах изображений.
 */
function get_image_sizes( $unset_disabled = true ) {
    $wais = & $GLOBALS['_wp_additional_image_sizes'];
    $sizes = array();

    foreach ( get_intermediate_image_sizes() as $_size ) {
        if ( in_array( $_size, array('thumbnail', 'medium', 'medium_large', 'large') ) ) {
            $sizes[ $_size ] = array(
                'width'  => get_option( "{$_size}_size_w" ),
                'height' => get_option( "{$_size}_size_h" ),
                'crop'   => (bool) get_option( "{$_size}_crop" ),
            );
        } elseif ( isset( $wais[$_size] ) ) {
            $sizes[ $_size ] = array(
                'width'  => $wais[ $_size ]['width'],
                'height' => $wais[ $_size ]['height'],
                'crop'   => $wais[ $_size ]['crop'],
            );
        }

        if( $unset_disabled && ($sizes[ $_size ]['width'] == 0) && ($sizes[ $_size ]['height'] == 0) )
            unset( $sizes[ $_size ] );
    }

    return $sizes;
}

die( print_r( get_image_sizes() ) );

Теперь перейдите на сайт и вы увидите массив с зарегистрированными размерами.

КАК ОТКЛЮЧИТЬ СОЗДАНИЕ КОПИЙ?

Чтобы отключить генерацию копий по умолчанию, перейдите в Настройки > Медиафайлы и установите ноль для "большого" и "среднего" размеров.

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

Обратите внимание: при отображении изображений в медиазагрузчике при прикреплении изображения к посту используется средний размер. Но если его нет, то используется миниатюра. Поэтому средн��й размер можно безопасно отключить.

Размер medium_large, созданный по умолчанию с версии 4.4, нельзя отключить на странице настроек медиа. Чтобы отключить его, используйте следующий хук, или зайдите на скрытую страницу настроек example.com/wp-admin/options.php и установите 0 в настройке medium_large_size_w.

1 ОТКЛЮЧЕНИЕ В КОДЕ

Другие две копии создаются темой. Обычно код темы, отвечающий за генерацию дополнительных размеров, можно найти в файле functions.php. Ищите размеры, которые вы видели через FTP и функцию add_image_size(). Например:

add_image_size( 'homepage-thumb', 1038, 576, true );

Удалите или закомментируйте эту строку, чтобы отключить создание размера 1038x576.

Создание копий также может управляться функцией set_post_thumbnail_size(), которая выглядит так:

set_post_thumbnail_size( 150, 150 );

Эту строку также нужно удалить или закомментировать.

2 УДАЛЕНИЕ ЗАРЕГИСТРИРОВАННЫХ РАЗМЕРОВ ЧЕРЕЗ ФИЛЬТР

В версии WordPress 3.9 появилась функция remove_image_size(), которая позволяет удалять указанный размер миниатюры (физические файлы не удаляются). Теперь вместо удаления строк вы можете отключить ненужные размеры, добавляя фильтр в файл functions.php:

add_action( 'after_setup_theme', 'remove_plugin_image_sizes', 999 );

function remove_plugin_image_sizes() {
    remove_image_size( 'image-name' );
}

Здесь 'image-name' - это имя размера, который нужно удалить. Удаление происходит при событии after_setup_theme, что обычно достаточно. 999 указывает на то, что функция удаления будет вызвана поздно, т.е. после всех других функций во время этого события.

3 ОТКЛЮЧЕНИЕ СОЗДАНИЯ ДОПОЛНИТЕЛЬНЫХ РАЗМЕРОВ ЧЕРЕЗ ФИЛЬТР

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

ОПЦИЯ 1

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

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

add_filter( 'intermediate_image_sizes', 'delete_intermediate_image_sizes' );

function delete_intermediate_image_sizes( $sizes ) {
    // размеры для удаления
    return array_diff( $sizes, [
        'medium_large',
        'large',
        '1536x1536',
        '2048x2048',
    ] );
}

ОПЦИЯ 2

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

add_filter( 'intermediate_image_sizes_advanced', function( $sizes ) {
    unset( $sizes['blog-large'] );
    unset( $sizes['blog-medium'] );
    unset( $sizes['tabs-img'] );
    unset( $sizes['related-img'] );
    unset( $sizes['portfolio-full'] );

    return $sizes;
});

В этом коде имена: 'blog-large', 'blog-medium' и т.д. — это названия зарегистрированных размеров миниатюр, которые не должны создаваться при загрузке оригинального изображения.

4 ИЗМЕНЕНИЕ ИЛИ ОТКЛЮЧЕНИЕ *-SCALED РАЗМЕРА

Для получения дополнительной информации о размере *-scaled смотрите примечание.

Измените максимальный допустимый размер изображения по ширине/высоте:

add_filter( 'big_image_size_threshold', function(){
    return 1600;
});

Отмените размер scaled - ограничьте максимальный размер изображения:

add_filter( 'big_image_size_threshold', '__return_zero' );

5 УДАЛЕНИЕ СТАРЫХ РАЗМЕРОВ (НЕОБХОДИМЫЕ ФАЙЛЫ)

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

Для этого вы можете использовать команду wp-cli:

wp media regenerate

или плагин Force Regenerate Thumbnails.

ЗАКЛЮЧЕНИЕ

Перед использованием материалов из этой статьи убедитесь, что отключаемые размеры не используются в вашей текущей теме в качестве миниатюр для постов, в боковой панели или для других типов постов. Удаляйте созданные копии только когда уверены, что они не нужны для корректной работы темы.

Leave a Reply

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