the_post_thumbnail масштабирует изображение вместо жесткого кропа

16 апр. 2014 г., 10:11:05
Просмотры: 17.5K
Голосов: 4

Недавно я решил добавить миниатюры записей (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 включен - он включен, и перегенерировал миниатюры. Ничего из этого не решило проблему.

Буду благодарен за любые идеи.

0
Все ответы на вопрос 3
0

Согласно записи в 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' );
18 апр. 2014 г. 15:56:05
0

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

array(1024, 512, true)

По крайней мере, так это делается, если вы определили размер миниатюры изображения в вашем файле functions.php. Так что, я полагаю, это должно работать и в массиве the_post_thumbnail тоже :) Ну а если вдруг не сработает, вы всегда можете определить размер миниатюры в functions.php и использовать его...

Вот ссылка на документацию: http://codex.wordpress.org/Function_Reference/set_post_thumbnail_size

17 апр. 2014 г. 13:53:32
0

Вот что решило проблему (возможно, не самое элегантное решение, но пока работающее):

В файле 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')); // добавляем миниатюру записи
}
?>

Что мне непонятно - ни одно из этих решений не работает без другого. В любом случае, пока это решает проблему.

18 апр. 2014 г. 15:49:45