wp_get_attachment_image_src() возвращает неожиданные размеры изображения
У меня возникла раздражающая проблема, которую я не могу решить:
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] =>
)
Есть идеи, в чем может быть причина? Заранее спасибо.

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

Нижеизложенное полностью основано на эксперименте, проведённом за последние 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
, так как это полностью перехватит функцию.

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