WooCommerce | Переменный продукт | Присвойте одно и то же изображение атрибуту X (из Y) для каждого значения - PullRequest
4 голосов
/ 05 апреля 2020

В переменном продукте WooCommerce есть атрибуты и значения атрибутов, которые создают варианты.

E.g. :
Attribute: 1 (Size) | Values: XS/S/M/L/XL
Attribute: 2 (Style/Color) | Values: Red/Green/Blue/Black/...
Attribute: 3 (Fabric) | Cotton/Polyester/Some other stuff...

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

Существует ли простой способ связать одно изображение с "ЗНАЧЕНИЕМ ATTRIB2", поэтому вам не нужно вручную редактировать каждое изображение из вариаций?

100 продуктов с 500 отдельными вариациями кажутся непростыми, должен быть лучший способ .

Изменить: 1 изображение для всех синих вариаций; 1 изображение для всех красных вариаций ... et c ...

Дополнительный вопрос: Есть ли способ использовать объем "Установите обычную цену "применить ко ВСЕМ вариантам вместо только тех, которые на активной" странице "?

1 Ответ

1 голос
/ 10 апреля 2020

В моей тестовой установке у меня работает следующее:

/**
 * Replace Woocommerce Product Variation Images
 * based on variation slug 
 */

add_filter( 'woocommerce_product_variation_get_image_id', 'so_filter_wooc_product_variation_images', 10, 2 ) ;

function so_filter_wooc_product_variation_images( $image_id, $data ) {

    //the variation product slug includes "-black"...
    if ( strpos( $data->slug, '-black') ) { 

        //replace with new image by id number
        return $new_image_id ;

    } 

    //else return the image_id according to default settings
    return $image_id ;

}

Теперь вам не обязательно искать слаг продукта, как я сделал здесь: обязательно есть другие переменные, которые, в зависимости от части в вашей схеме установки может отличать guish один набор переменных продуктов от другого. Однако по умолчанию слагаемое продукта для варианта продукта объединяет термины атрибута. Итак, если ваш продукт «Тестовый продукт»; у вас есть два размера, «большой» и «маленький» и два цвета, «черный» и «белый»; они могут создавать вариации; и варианты оцениваются (что необходимо), вы получите товарные слагаемые в формате test-product-big-black и test-product-big-white и т. д., так что это похоже на надежный метод для достижения примерно того, что вы хотите, сосредоточенный на атрибуте ,

Это, однако, не надежный метод: если имя атрибута встречается в названии элемента, то есть некоторый шанс случайного наложения - скажем, для продукта с названием «Test Black Product». Как решить эту проблему программно, очевидно, более сложный вопрос: функция, которую я здесь предоставил, все еще иллюстрирует общую концепцию.

Что касается $new_image_id_number, вы можете получить это различными способами, поэтому я оставил это открытым. Например, вы можете просто найти идентификатор вложения, наведя курсор мыши на изображение, которое вы хотите использовать в библиотеке мультимедиа. В качестве альтернативы, вы можете создать вариант сайта - по старинке или, возможно, с помощью Advanced Custom Fields Pro - и извлечь идентификатор из загрузки изображения.

В любом случае, это рабочее решение оказывается довольно простым. Хук фильтра основан на защищенной функции в abstract-w c -данных. php ...

$value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this );

..., которая в данном случае построена из "префикса ловушки" woocommerce_product_variation_ и рассматриваемое свойство, в данном случае image_id.

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

...