Почему wp_get_attachment_image_src возвращает неправильный размер, когда правильный размер существует?

Вопрос или проблема

У меня зарегистрированы следующие размеры, которые я проверил с помощью Regenerate Thumbnails.

thumbnail => 185x125 (кроп)
shop_thumbnail => 150x62 (кроп)
alm-thumbnail => 150x150 (кроп)

Используя следующий код, я получаю неправильный размер:

$test = wp_get_attachment_image_src( $id, 'shop_thumbnail' );
/*
$test = array(
  "http://.../2018/02/underwear-150x150.png",
   62,
   62
)
*/

Но если я использую эту функцию для получения метаданных, пользовательский размер явно определен…

$test = wp_get_attachment_metadata( $id );
/*
$test = array(
  ["width"]=> int(177)
  ["height"]=> int(436)
  ["file"]=> string(21) "2018/02/underwear.png"
  ["sizes"]=> array(
"thumbnail"]=>
    array(4) {
      ["file"]=> string(21) "underwear-177x125.png"
      ["width"]=> int(177)
      ["height"]=> int(125)
      ["mime-type"]=> string(9) "image/png"
    }
// ...другие размеры
    ["shop_thumbnail"]=>
    array(4) {
      ["file"]=> string(20) "underwear-150x62.png"
      ["width"]=> int(150)
      ["height"]=> int(62)
      ["mime-type"]=> string(9) "image/png"
    }
)

Как видите, shop_thumbnail действительно существует во втором примере, но не возвращается в первом примере. Я проверил, что файл 150×62 существует, и он есть.

Почему wp_get_attachment_image_src возвращает неправильный размер? Похоже, что он использует alm-thumbnail, даже несмотря на то, что ajax load more вообще не используется на этой странице.

Много “возможных дубликатов” говорят, что мне нужно определить $content_width, но я не смог решить проблему этим.

Обновление: Изменение ‘shop_thumbnail’ на array(150, 62) работает, но это не идеально, так как shop_thumbnail используется на всех шаблонах WooCommerce. Я все еще хотел бы разобраться в этом.

Попробуйте эту функцию:

woocommerce_get_product_thumbnail();

Это, похоже, стандартная функция для получения миниатюры продукта, как можно видеть в базе кода wc
По умолчанию она будет возвращать woocommerce_thumbnail, но, похоже, принимает и другие размеры в первом параметре.

Ответ или решение

Причины, по которым функция wp_get_attachment_image_src может возвращать неправильный размер изображения, даже если размер существует, могут быть различными. В вашем случае есть несколько моментов, на которые стоит обратить внимание:

  1. Регистрация размеров изображений: Убедитесь, что размеры изображений зарегистрированы правильно в функции add_image_size(). Если вы добавляли новые размеры после загрузки изображений, вам необходимо использовать плагин для регенерации миниатюр, что вы уже сделали. Это позволит WordPress создать новые размеры для всех загруженных ранее изображений.

  2. Приоритет функций WooCommerce: WooCommerce иногда переопределяет стандартные функции WordPress, такие как wp_get_attachment_image_src, чтобы использовать свои собственные функции для получения изображений продуктов. В вашем случае, если вы используете функцию woocommerce_get_product_thumbnail(), это может быть причиной получения неверного размера. Она может в первую очередь обращаться к стандартным размерам, зарегистрированным WooCommerce, а не к вашим кастомным размерам.

  3. Кэширование: Если вы используете кэширование на сайте (плагины кэширования или кэш браузера), это может влиять на то, какие размеры загружаются. Попробуйте очистить кэш и загрузить страницу заново, чтобы устранить эту возможность.

  4. Использование других функций: Если вы хотите, чтобы размеры, по умолчанию используемые WooCommerce, были также применены к вашему коду, вы можете использовать функцию woocommerce_get_product_thumbnail(). Эта функция принимает параметры, которые позволяют вам указать, какой размер изображения использовать:

    echo woocommerce_get_product_thumbnail('shop_thumbnail');

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

  5. Проверка контекстов вызова: Если вы используете функцию внутри различных контекстов (например, в цикле, в AJAX-запросах и т. д.), убедитесь, что вы правильным образом передаёте ID вложения. Неправильный ID может привести к неправильному размеру получаемого изображения.

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

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

Оцените материал
Добавить комментарий

Капча загружается...