• Никакой политики на форуме. Иначе - бан!
  • Вопрос без рабочей ссылки на проблему считается риторическим. Без ссылки и скриншота - провокацией!
  • Темы озаглавленные с маленькой буквы или капсом удаляются без предупреждения!

Решено Заглушка для вариативного товара если нет фото

neoplanet

Новичок
Здравствуйте!

Подскажите пожалуйста, каким образом можно по умолчанию установить изображение-заглушку (placeholder) для вариативного товара если у вариации нет изображения?

К примеру есть 3 вариации:
1) красное (есть изображение)
2) белое (есть изображение)
3) черное (нет изображения)

Изображение товара по умолчанию установлено как красное.

При выборе вариации — красное, отображается красное.
При выборе вариации — белое, отображается соответственно белое.
При выборе вариации — черное подгружается основное изображение товара (т.е. красное).

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

Каким образом можно установить заглушку (например с надписью - на фотосессии) при выборе вариации у которой нет изображения?

Сейчас устанавливаю вручную для таких вариаций заглушку, выбирая из фото (обычный выбор изображения вариации товара). Дело не из легких.

Можно ли как-то программно сделать это автоматически чтобы при выборе вариации у которой нет изображения, отображалась заглушка? Пересмотрел кучу статей и форумов, нигде не нашел информацию как это реализовать.

Спасибо.
 
Последнее редактирование:

neoplanet

Новичок
Решил проблему методом "тыка".
Кому необходимо, ниже решение.

Функция которая возвращает ID основного изображения товара, если нет фото вариации находится в файле — /wp-content/plugins/woocommerce/includes/class-wc-product-variation.php

PHP:
public function get_image_id( $context = 'view' ) {
    $image_id = $this->get_prop( 'image_id', $context );

    if ( 'view' === $context && ! $image_id ) {
        $image_id = apply_filters( $this->get_hook_prefix() . 'image_id', $this->parent_data['image_id'], $this );
    }

    return $image_id;
}

Переопределяем функцию в своем шаблоне в файле function.php:

PHP:
// Добавляем заглушку для вариативного товара если он не имеет изображения
add_filter( 'woocommerce_product_variation_get_image_id', 'filter_woocommerce_product_variation_images', 10, 2 ) ;

function filter_woocommerce_product_variation_images( $image_id) {
    if ( empty($image_id) ) {
        return 6; // id заглушки (можно получить в медиафайлах)
    } else {
        return $image_id;
    }
}

В итоге если у вариативного товара нет фото, будет отображаться заглушка (в моем случае с ID - 6).

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