В моей тестовой установке у меня работает следующее:
/**
* 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
.
(Я был изначально смущен, когда, просматривая класс варианта продукта, я обнаружил фильтр с похожей структурой, который по существу дублирует функциональность для некоторые случаи, которые здесь не применимы.)