the_post_thumbnail масштабирует изображение вместо жесткого кропа
Недавно я решил добавить миниатюры записей (featured images) в свой блог. Я использую кастомную тему на основе roots theme (это не проблема roots темы, я уверен). Загружаемое изображение имеет размер 1024x768 и должно быть обрезано до формата letterbox 1024x512.
Вот код, который я использую в файле темы:
<?php
if ( has_post_thumbnail() ) {
the_post_thumbnail(array(1024, 512), array('class' => 'img-responsive')); // добавляем миниатюру записи
}
?>
Проблема в том, что на локальном сервере XAMPP все работает идеально. Но на веб-сервере изображения не обрезаются и не занимают всю ширину основной области контента, как на локальной установке. Проверив код через Firebug, вижу что изображение имеет размер 682px в ширину и 512px в высоту (на XAMPP было 1024x512px). Получается, что изображение масштабируется, а не обрезается.
Я перезагрузил тему, отключил все плагины. Конечно же, я искал похожие темы, пробовал другие примеры кода, проверял что GD включен - он включен, и перегенерировал миниатюры. Ничего из этого не решило проблему.
Буду благодарен за любые идеи.

Согласно записи в Codex о the_post_thumbnail()
, передача массива не работает с WordPress 3.0:
ВНИМАНИЕ: Обрезка не работает в WP 3.0+. Для WP 3.0+ достаточно вызвать миниатюру для записи. Затем перейдите в медиафайлы в панели управления и установите желаемый размер обрезки для миниатюры.
Правильная реализация заключается в создании пользовательского размера изображения с вашими значениями массива через add_image_size()
внутри функции настройки темы (или любого другого колбэка, подключенного к after_setup_theme
):
add_image_size( 'custom-size', 1024, 512, true );
...а затем вызов этого размера напрямую:
the_post_thumbnail( 'custom-size' );

Обычно, если вы хотите обрезать миниатюру, вам нужно указать это, используя "true" в качестве третьего параметра.
array(1024, 512, true)
По крайней мере, так это делается, если вы определили размер миниатюры изображения в вашем файле functions.php. Так что, я полагаю, это должно работать и в массиве the_post_thumbnail тоже :) Ну а если вдруг не сработает, вы всегда можете определить размер миниатюры в functions.php и использовать его...
Вот ссылка на документацию: http://codex.wordpress.org/Function_Reference/set_post_thumbnail_size

Вот что решило проблему (возможно, не самое элегантное решение, но пока работающее):
В файле custom.php (это functions.php темы roots) я добавил следующее:
if ( function_exists( 'add_theme_support' ) ) {
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size(1024, 512, true);
}
В файле темы, где должно появляться миниатюрное изображение записи, я добавил это:
if ( has_post_thumbnail() ) {
the_post_thumbnail(array(1024, 512, true), array('class' => 'img-responsive')); // добавляем миниатюру записи
}
?>
Что мне непонятно - ни одно из этих решений не работает без другого. В любом случае, пока это решает проблему.
