首页 > 解决方案 > WooCommerce | 可变产品 | 每个值将相同的图像分配给属性 X(Y 之外)

问题描述

在 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 张图片......等等......  

附带问题:有没有办法使用批量“设置正常价格”来应用于所有变体,而不仅仅是活动“页面”上的变体?

标签: wordpresswoocommerceproduct

解决方案


在我的测试安装中,以下内容适用于我:

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

}

现在,您不必像我在这里所做的那样搜索产品标签:还有其他变量,部分取决于您的安装设计,可能会将一组可变产品与另一组区别开来。但是,默认情况下,产品变体的产品标签将组合属性项。因此,如果您的产品是“测试产品”;你有两种尺寸,“大”和“小”,两种颜色,“黑”和“白”;他们能够产生变化;并且变体已定价(这是必需的),您将获得格式为test-product-big-black和的产品test-product-big-white信息,依此类推,因此这似乎是一种可靠的方法,可以大致实现您想要的,专注于属性。

然而,这不是一个万无一失的方法:如果属性名称出现在项目标题中,那么偶尔会有一些重叠的机会 - 例如,标题为“Test Black Product”的产品。显然,如何以编程方式解决这个问题是一个更复杂的问题:我在这里提供的函数仍然说明了一般概念。

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

无论如何,这个可行的解决方案非常简单。过滤器挂钩基于 abstract-wc-data.php 中的受保护函数...

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

...在这种情况下是由“钩子前缀”woocommerce_product_variation_和有问题的属性构成的,在这种情况下image_id

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


推荐阅读