电子商务 |变量产品 |将相同的图像分配给每个值的属性 X(Y 中的)

WooCommerce | Variable Product | Assign same image to Attribute X (out of Y) per value

在 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 VALUE" 的单张图片关联起来,这样您就不必手动编辑变体中的每张图片?

100 种产品和 500 种单一变体似乎需要大量的猴子工作,必须有更好的方法

编辑: 1 张所有蓝色变体的图片; 所有红色变体的 1 张图片... ETC...

附带问题: 有没有办法使用批量 "Set Regular Price" 来应用于所有变体而不是仅活跃的 "page"?

以下在我的测试安装中对我有用:

/**
 * 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 ;

}

现在,您不必像我在这里所做的那样搜索产品 slug:还有其他变量,部分取决于您的安装设计,可能会将一组可变产品与另一组区别开来。但是,默认情况下,产品变体的产品标签将组合属性项。所以,如果你的产品是 "Test Product";您有两种尺码 "Big" 和 "Small," 以及两种颜色 "Black" 和 "White";他们能够产生变化;并且变化是定价的(这是必需的),你会得到格式为 test-product-big-blacktest-product-big-white 的产品 slug,等等,所以这似乎是一个可以大致实现你想要的东西的合理方法,专注于属性。

但是,这并不是万无一失的方法:如果属性名称出现在商品标题中,则可能会偶尔出现重叠 - 例如,商品标题为 "Test Black Product." 如何解决此问题显然,以编程方式发布问题是一个更复杂的问题:我在此处提供的功能仍然说明了一般概念。

至于 $new_image_id_number,您可以通过各种不同的方式获得它,所以我将其留空。例如,您只需将鼠标悬停在媒体库中要使用的图像上即可找到附件 ID。或者,您可以创建一个站点选项 - old-fashioned 或使用 Advanced Custom Fields Pro - 并从图像上传中提取 ID。

无论如何,这个可行的解决方案非常简单。过滤器钩子基于abstract-wc-data.php...

中的受保护函数
$value = apply_filters( $this->get_hook_prefix() . $prop, $value, $this );

...在本例中由 "hook prefix," 构成 woocommerce_product_variation_,在本例中由 属性 构建,在本例中为 image_id.

(最初我很困惑,在查看产品变体 class 时,我发现了一个具有类似结构的过滤器,它基本上复制了此处不适用的某些情况的功能。)