Жесткая обрезка the_post_thumbnail не работает несмотря ни на что

8 дек. 2011 г., 04:07:00
Просмотры: 27.4K
Голосов: 8

Что бы я ни делал - я не могу заставить работать режим жесткой обрезки в the_post_thumbnail.

Вот что у меня есть:

add_image_size( 'Blog', 300, 300, true ); 
the_post_thumbnail('Blog');

Я также пробовал:

set_post_thumbnail_size( 300, 300, true );
the_post_thumbnail();

Я пробовал загружать новые изображения и использовать плагин "Regenerate Thumbnails", но все равно безуспешно. Он полностью игнорирует параметр "true" и ведет себя так, как будто установлен "false". Например, вместо изображения размером 300x300 получается 300x238 или что-то подобное.

Кто-нибудь сталкивался с этим? Моя библиотека GD включена..

Спасибо за любую информацию, которую кто-то может предложить =)

5
Комментарии

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

patnz patnz
8 дек. 2011 г. 05:22:26

Загрузите изображение больше 300x300, и все должно заработать.

Chris_O Chris_O
8 дек. 2011 г. 07:24:25

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

add_image_size( 'Blog', 200, 200, true );

Изображение, которое я загрузил (заново), имеет размер 359x500. В результате изображение становится 143x200. Я уже не знаю, что еще попробовать, лол.

Еще раз спасибо за ваши комментарии!

Tom Tom
8 дек. 2011 г. 21:41:01

Скорее всего, проблема на стороне сервера -> смотрите мой ответ ниже.

Brian Fegter Brian Fegter
17 февр. 2012 г. 11:33:22

Относительно правки, которую я только что одобрил: Пожалуйста, добавляйте решения в виде ответов. Вы сможете отметить их как решение (зеленая галочка под стрелками голосования) через два дня.

kaiser kaiser
26 июл. 2012 г. 04:11:30
Все ответы на вопрос 8
2

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

Если вы изменили размеры изображений, вам потребуется перегенерировать миниатюры с помощью этого плагина: http://wordpress.org/extend/plugins/regenerate-thumbnails/

26 июл. 2012 г. 05:12:54
Комментарии

Я не думаю, что это можно сделать из стандартной медиабиблиотеки, верно? Мне пришлось использовать плагин "Regenerate Thumbnails".

Simon East Simon East
15 сент. 2014 г. 12:17:10

Да, это правда. Я забыл упомянуть об этом пару лет назад, в мои более новичковые дни :P Отредактировал свой ответ.

bryceadams bryceadams
15 сент. 2014 г. 15:09:56
4

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

Сначала выполните проверку, вызвав phpinfo(), чтобы убедиться, установлен ли GD.

Установка GD на Linux

Если у вас есть доступ к shell, просто выполните эту команду:

sudo apt-get install php5-gd

После установки GD потребуется перезапустить сервер.

Вот команда для перезапуска Apache:

/etc/init.d/apache2 restart

Shared-хостинг

Если вы используете shared-хостинг, вам нужно связаться с вашим хостинг-провайдером и попросить их установить GD на сервер.

Последний момент

Поддерживает ли ваша тема миниатюры?

add_theme_support('post-thumbnails');
17 февр. 2012 г. 11:32:40
Комментарии

Спасибо большое за ответ, Брайан =)

Я подтвердил, что GD Library установлена на моем сервере (я использую WAMP) - я также столкнулся с той же проблемой на своем сервере и других.

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

Есть еще какие-то идеи? Большое спасибо.

Tom Tom
19 февр. 2012 г. 05:45:30

@Tom Проверь последние изменения. :)

Brian Fegter Brian Fegter
19 февр. 2012 г. 13:53:55

Спасибо за уточнение. У меня действительно включены миниатюры, так как я могу выбрать изображение записи, и оно отображается, просто оно не обрезается жестко до указанных мной размеров. Может ли это конфликтовать с чем-то еще в моей теме? Пока я использую TimThumb для этой задачи, но хотелось бы использовать функции WordPress везде, где это возможно.. Еще раз спасибо =)

Tom Tom
20 февр. 2012 г. 19:53:48

Это именно тот ответ, который я искал. Я знал, что нужно установить какой-то пакет, и просто искал какой именно... спасибо

Orabîg Orabîg
14 янв. 2013 г. 02:05:56
2

Я наконец-то решил эту проблему.

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

Таким образом, следующий код будет работать:

function add_custom_sizes() {
    // Добавляем пользовательские размеры изображений с жестким кадрированием
    add_image_size( 'portfolio-thumb', 243, 163, true );      // Миниатюра портфолио
    add_image_size( 'portfolio-image', 1074, 725, true );     // Основное изображение портфолио
    add_image_size( 'available-homes', 500, 279, true );     // Доступные дома
    add_image_size( 'idea-thumb', 146, 141, true );          // Миниатюра идей
}
add_action('after_setup_theme','add_custom_sizes');

Это позволит вам получить именно жестко кадрированные изображения указанных размеров при использовании the_post_thumbnail().

Надеюсь, это поможет и другим разработчикам.

22 нояб. 2012 г. 19:21:46
Комментарии

пробовал всё, включая это, всё равно не работает

Tintinabulator Zea Tintinabulator Zea
3 окт. 2018 г. 06:44:23

Это тоже не работает у меня.

Lars SG Lars SG
11 февр. 2021 г. 07:30:57
0

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

the_post_thumbnail($post->ID, array(300,300, true));
31 дек. 2011 г. 00:12:31
0

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

Важное замечание: изображения должны храниться локально, а не удалённо. Предположительно, миниатюры не создаются для удалённых изображений.

9 мая 2013 г. 13:28:14
0

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

Чтобы исправить это, я подключился к своему серверу по SSH, перешёл в папку wp-content/uploads и сбросил владельца для всех изображений там. Например:

chown -R {web user}:{group} .

Надеюсь, это поможет кому-то.

27 мая 2015 г. 13:01:28
0

Вы никогда не получите жестко обрезанное изображение, кроме стандартных размеров.

Вы не найдете этого ответа на форумах WordPress, или если найдете, вам будут месяцами манить морковкой, пока вы не начнете нервничать, не получите бан или пока они тихо не исправят проблему.

Жестко обрезанные изображения доступны только для:

  • Миниатюр (Thumbnail)
  • Всех остальных размеров, КРОМЕ миниатюр И ВАШИХ ПОЛЬЗОВАТЕЛЬСКИХ РАЗМЕРОВ

То, что невозможно, никогда не показывается в интерфейсе или активно скрывается на форумах (наш бесплатный .org проект — это их .com продукт), даже если вышеуказанные варианты заставляли вас рвать на себе волосы месяцами.

Второй пункт должен звучать как "ВСЕ ОСТАЛЬНЫЕ РАЗМЕРЫ, КРОМЕ ВАШИХ".

Я разрабатываю плагин для этого, и еще кое-что волшебное. Скоро закончу, но мне понадобится помощь с публикацией в библиотеке плагинов, так как меня забанили! хе-хе (за помощь другим с недокументированными (или проигнорированными) багами)

27 окт. 2012 г. 01:11:50
0

У меня была такая же проблема, и я установил плагин, который позволяет перегенерировать одно/несколько/все изображения. Вот этот плагин: [http://wordpress.org/plugins/regenerate-thumbnails/]

Я не нашел способа сделать это через интерфейс админки WP, кроме как удалить и загрузить изображение заново.

Другой способ, если вы не хотите использовать плагин - сделать это с помощью PHP-функций:

function wp_regenerate() {
include( ABSPATH . 'wp-admin/includes/image.php' );
wp_generate_attachment_metadata( $thumbnail_id, $absolute_path_to_image ); }

add_action('after_setup_theme', 'wp_regenerate');

где $thumbnail_id и $absolute_path_to_image нужно заменить на нужные вам значения.

Спасибо @briceadams и @adriaticiq. Я пока не могу проголосовать за вас, но сделаю это, как только мне будет разрешено.

30 дек. 2013 г. 17:45:29