wp_get_attachment_image_src() возвращает неожиданные размеры изображения

30 июл. 2013 г., 17:33:43
Просмотры: 17.5K
Голосов: 0

У меня возникла раздражающая проблема, которую я не могу решить:

if( $meta1 = '' && $meta2 = '' ) { 
// Получаем атрибуты изображения с пользовательским размером
$image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), my_own_size_function());
echo  $image_attributes[0];
} elseif(  $meta1 != '' ) { 
    echo $meta1; 
} elseif ( $meta2  != '' ){
    $image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), my_own_size_function() );
    echo $image_attributes[0];
} else {
    echo "ko";
}

Когда я делаю print_r для my_own_size_function(), я получаю массив такого вида:

Array
(
     [0] => 600
     [1] => 400
)

Но когда я делаю print_r для $image_attributes, я получаю другой результат:

Array
(
    [0] => http://localhost/wordpress/wp-content/uploads/2013/07/my_image.jpg
    [1] => 200
    [2] => 150
    [3] => 
)

Есть идеи, в чем может быть причина? Заранее спасибо.

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

Измените функцию my_own_size_function() на array(600, 400)

$image_attributes = wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array(600, 400));
30 июл. 2013 г. 17:47:22
Комментарии

Спасибо, чувак, но здесь должно быть array(600,400). В любом случае я уже пробовал это, но проверил функцию в кодексе, и там сказано, что $size может быть массивом, моя функция уже возвращает array(600,400);

JMau JMau
30 июл. 2013 г. 17:51:02

И у тебя загружено изображение такого размера?

Pontus Abrahamsson Pontus Abrahamsson
30 июл. 2013 г. 17:55:45
2

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

wp_get_attachment_image_src() использует функцию image_downsize(), которая попытается найти и вернуть изображение, наиболее близкое по размеру к указанным значениям. Если поэкспериментировать с известными размерами изображений (посмотреть на фактические изображения, сохранённые в wp-content/uploads), вы поймёте, что я имею в виду. Несмотря на название, иногда она возвращает изображения большего размера, но компоненты высоты и ширины массива должны быть установлены в указанные значения или в некоторую попытку масштабированного приближения (как кажется), если эти значения сильно неточны. Я не могу сказать, происходит ли такое "масштабирование" в вашем случае, но это возможно и кажется вероятным.

Приведу пример. У меня есть изображение, сохранённое в размерах 150x150, 293x300 и в полном размере. Этот код...

var_dump(wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array(20, 20)));

... возвращает массив с изображением 150x150 и размерами, которые я указал — 20x20. Однако этот код...

var_dump(wp_get_attachment_image_src( get_post_thumbnail_id( $post->ID ), array(200, 250)));

... возвращает URL изображения 150x150, но с размерами 200x204. Это не то, что я указал. Значения размеров были изменены каким-то алгоритмом. При дальнейшем исследовании выяснилось, что image_constrain_size_for_editor является более вероятным кандидатом.

Вы также можете проверить, не была ли применена какая-либо функция к фильтру image_downsize, так как это полностью перехватит функцию.

30 июл. 2013 г. 18:23:47
Комментарии

Спасибо за ваш ответ. В любом случае полезно почитать, но проблема в том, что размер вообще не меняется. Я добавил селектор размера для миниатюр записей. Похоже, что проблема не в функции my_own_size_function(), потому что при использовании print_r я получаю то, что нужно.

JMau JMau
30 июл. 2013 г. 18:37:03

Кажется, я был слабым звеном! Проверил загруженные файлы и оказалось, что работал с единственным изображением, у которого не было нужного размера.

JMau JMau
30 июл. 2013 г. 18:43:13