Кто-нибудь может помочь со следующим?
Я пытаюсь изменить один из пользовательских размеров миниатюр, созданных темой в дочерней теме, я добавил следующее в functions.php в дочерней теме:
add_theme_support( 'post-thumbnails' );
remove_image_size( 'sela-grid-thumbnail' );
add_image_size( 'sela-grid-thumbnail', 242, 242, true );
Оригинальная функция из темы парен:
add_theme_support( 'post-thumbnails' );
// Post thumbnails
set_post_thumbnail_size( 820, 312, true );
// Hero Image on the front page template
add_image_size( 'sela-hero-thumbnail', 1180, 610, true );
// Full width and grid page template
add_image_size( 'sela-page-thumbnail', 1180, 435, true );
// Grid child page thumbnail
add_image_size( 'sela-grid-thumbnail', 360, 242, true );
// Testimonial thumbnail
add_image_size( 'sela-testimonial-thumbnail', 90, 90, true );
Но мои изображения «sela-grid-thumbnail» все еще выходят в оригинальном размере из functions.php родительской темы — кто-нибудь может сказать мне, почему? Я что-то пропустил? Спасибо
Шаг 1. Загрузите новый размер после родительского
Вы должны убедиться, что вы переопределяете размер изображения после родитель объявил это. Что я имею в виду под этим?
При звонке add_image_size()
все, что он делает, это берет параметры и сохраняет их в глобальном $_wp_additional_image_sizes
, который вводится именем, которое вы ему даете. Вы можете перезаписать параметры, если у вас есть ключ (запомните это позже).
Давайте пройдемся по последовательности загрузки. WordPress загружает плагины, затем дочернюю тему, а затем родительскую тему. Подумай об этом. Вы хотите изменить размер изображения по умолчанию, который создает родитель. Правильно? Это означает, что родительская тема должна быть запущена в первую очередь, прежде чем пытаться ее изменить.
Проверьте свою дочернюю тему и убедитесь, что вы переопределяете размер изображения после родительская тема добавляет это.
Шаг 2: Вам не нужно удалять его
Вам не нужно удалять размер изображения. Вместо этого просто запустите add_image_size
как у вас есть.
Зачем? Помните, что я сказал выше, когда работает add_image_size
WordPress перезаписывает то, что хранится под именем, которое вы называете размером изображения. Когда вы вызываете ее в своей дочерней теме, она перезаписывает то, что родительская тема хранит в глобальной $_wp_additional_image_sizes
,
Чтобы помочь вам визуализировать это, вот код из ядра WordPress:
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,
);
}
Вы видите, как это просто перезаписывает, если имя уже существует? Иначе, это добавляет это как новый размер.
Когда вы хотите удалить размер изображения с помощью remove_image_size()
?
Делайте это, когда вы не переопределяете размер. Вы просто хотите полностью удалить его.
Шаг 3: Необходимо восстановить существующие изображения
При добавлении нового размера изображения, существующие изображения в медиа-библиотеке и в wp-content/uploads
не генерирует автоматически новые размеры. Все новые добавленные изображения будут сохранены с новым размером.
Что я имею в виду под этим?
Когда объявляется новый размер изображения, все новые изображения сохраняются в uploads
папка с каждым из заявленных размеров. Откройте папку и посмотрите. Вы увидите исходный файл изображения, а затем дополнительные файлы с каждым из размеров, добавленных в качестве суффикса. WordPress заботится об изменении размера и сохранении каждого размера изображения в Uploads
папка.
Как восстановить существующие изображения
Хорошо, как вы регенерируете все существующие изображения, чтобы получить новый размер? Я использую Viper Плагин «Восстановить эскизы». Он пройдет через все изображения, а затем создаст новые размеры.
Как вы проверяете, что ваш новый размер был зарегистрирован?
Регистрация хранится в глобальной переменной $_wp_additional_image_sizes
и под названием имени, которое вы дали ему, т.е. 'sela-grid-thumbnail'
, Чтобы увидеть, если он был зарегистрирован, вы можете сделать это:
add_action('loop_start', 'check_if_image_size_is_registered');
/**
* Check if the image size has been registered when the
* Loop first starts.
*
* @since 1.0.0
*
* @return void
*/
function check_if_image_size_is_registered() {
global $_wp_additional_image_sizes;
if ( ! isset( $_wp_additional_image_sizes['sela-grid-thumbnail'] ) ){
die('nope, not registered');
}
echo '<pre>';
var_dump( $_wp_additional_image_sizes['sela-grid-thumbnail'] );
echo '</pre>';
die('yes, it is registered');
}
Если он был зарегистрирован, то размеры отображаются в браузере. Вы можете проверить их, чтобы убедиться, что они соответствуют вашим размерам, то есть 242 x 242.
Это эхосигнал размером 242 х 242?
add_image_size()
,Вы проверили выше, и размер изображения правильно зарегистрирован. Но что делать, если изображение, которое вы видите, не имеет размера 242×242 в браузере?
Это другая проблема. Возможно:
the_post_thumbnail()
, Первый параметр — это размер, который будет 'sela-grid-thumbnail'
, Проверьте код, по которому вы звоните, чтобы отобразить миниатюру сообщения. Убедитесь, что размер указан.-242x242.jpg
к нему добавлен суффикс. Когда вы рендеринг изображения и установить его как 'sela-grid-thumbnail'
WordPress выбирает соответствующий файл из uploads
папка. Допустим, изображение my-cool-background.jpg
, WordPress будет захватывать my-cool-background-242x242.jpg
,
Вы можете проверить это, открыв Инструменты разработчика в Chrome или Firefox. Убедитесь, что правильный файл изображения находится в браузере, то есть -242x242.jpg
суффикс на нем.
Других решений пока нет …