Вопрос или проблема
Я нахожу противоречивую информацию о том, можно ли переопределять защищенные размеры изображений WordPress (thumbnail, medium, medium_large и large
) с помощью add_image_size()
. Некоторые документы указывают, что лучше делать это с помощью update_option()
. Существует ли практическая разница между этими фрагментами кода:
function mytheme_image_sizes() {
add_image_size('thumbnail', 200, 200, true);
add_image_size('medium', 480, 480, true);
}
по сравнению с
function mytheme_image_sizes() {
update_option( 'thumbnail_size_w', 200 );
update_option( 'thumbnail_size_h', 200 );
update_option( 'thumbnail_crop', 1 );
update_option( 'medium_size_w', 480 );
update_option( 'medium_size_h', 480 );
update_option( 'medium_crop', 1 );
}
Примечание: я указываю это в своей теме, чтобы остановить администраторов от произвольного изменения размеров и испорчивания функции адаптивных изображений после версии 4.4, и, вероятно, я уберу интерфейс администратора для изменения размеров изображений.
Разница небольшая, по умолчанию crop
установлен в false
.
function add_image_size( $name, $width = 0, $height = 0, $crop = false ) {
global $_wp_additional_image_sizes;
$_wp_additional_image_sizes[ $name ] = array(
'width' => absint( $width ),
'height' => absint( $height ),
'crop' => $crop,
);
}
И также в процессе оценки
if ( isset( $_wp_additional_image_sizes[ $size ] ) ) {
$width = intval( $_wp_additional_image_sizes[ $size ]['width'] );
$height = intval( $_wp_additional_image_sizes[ $size ]['height'] );
$crop = ( $nocrop ) ? false : $_wp_additional_image_sizes[ $size ]['crop'];
} else {
$height = get_option( "{$size}_size_h" );
$width = get_option( "{$size}_size_w" );
$crop = ( $nocrop ) ? false : get_option( "{$size}_crop" );
}
переменная $_wp_additional_image_sizes
принимается во внимание. Кроме этого, все очень просто, параметры будут считываться из таблицы параметров только если они не определены.
Также, пожалуйста, обратите внимание: таблица базы данных wp_options
считывается до того, как functions.php
будет обработан.
Ответ или решение
Для оптимизации работы с изображениями в WordPress многие разработчики сталкиваются с вопросом, как правильно изменять размеры защищённых изображений, таких как thumbnail
, medium
, medium_large
и large
. На сегодняшний день существует два основных метода для этого: add_image_size()
и update_option()
. Рассмотрим их подробнее.
Обзор методов
1. add_image_size()
Функция add_image_size()
предназначена для регистрации пользовательских размеров изображений, которые вы можете использовать в своей теме. Это позволяет вам создавать изображения с конкретными шириной и высотой, а также с возможностью обрезки. Вот пример:
function mytheme_image_sizes() {
add_image_size('thumbnail', 200, 200, true);
add_image_size('medium', 480, 480, true);
}
В этом случае, вы добавляете новые размеры, но также переопределяете существующие. Следует помнить, что WordPress будет использовать ваши настройки только для изображений, загруженных после добавления или обновления размера: уже загруженные изображения не будут пересозданы.
2. update_option()
С другой стороны, функция update_option()
изменяет стандартные настройки размеров изображений, которые уже существуют в WordPress. Таким образом, используя update_option()
, вы можете изменять размеры, определенные системой по умолчанию:
function mytheme_image_sizes() {
update_option( 'thumbnail_size_w', 200 );
update_option( 'thumbnail_size_h', 200 );
update_option( 'thumbnail_crop', 1 );
update_option( 'medium_size_w', 480 );
update_option( 'medium_size_h', 480 );
update_option( 'medium_crop', 1 );
}
Этот вариант достаточно эффективен, но также стоит отметить, что все изменения будут влиять на изображения, уже загруженные до изменения настроек.
Сравнение и выбор метода
-
Гибкость:
add_image_size()
предоставляет возможность создания новых пользовательских размеров, что полезно в случае специфических требований к изображениям. При этом это менее гибкий вариант, если вы хотите просто изменить существующий размер. -
Влияние на загруженные изображения: Если ваша цель – изменить уже загруженные изображения, то
update_option()
будет более подходящим решением, поскольку оно изначально затрагивает настройки по умолчанию и применимо к уже загруженным изображениям. -
Проблема конфликта: Изменение защищённых размеров с помощью
add_image_size()
может вызвать путаницу, потому что WordPress будет учитывать оба метода при выборке размеров изображения. Поэтому, если вы собираетесь переопределить стандартные размеры, рекомендуется использовать только один метод для избежания неоднозначности.
Рекомендации
Если ваша основная задача – обеспечить фиксированные размеры изображений для вашей темы, и вы планируете ограничить доступ администраторов к интерфейсу управления размерами изображений, имеет смысл использовать update_option()
. Это позволит вам установить чёткие параметры без риска случайного изменения размера через стандартный интерфейс WordPress.
Также, учитывая, что вы хотите остановить администратора от произвольной модификации размеров, подумайте о том, чтобы отключить интерфейс для настройки изображений в админке, что позволит избежать потенциальных проблем с отображением изображений.
Заключение
В конечном итоге выбор между add_image_size()
и update_option()
зависит от ваших конкретных требований и стратегии работы с изображениями в вашей теме WordPress. Будьте осторожны при выборе метода, так как это может существенно повлиять на поведение вашего сайта и восприятие изображений пользователями.