WooCommerce 根据单个属性设置产品尺寸(宽度和高度)
WooCommerce set product dimensions (width & height) based on single attribute
商店出售镶框图片。客户可以选择 框架 material 和 尺寸(预设宽度 x 高度组合列表)。 frame material 和 dimensions 都配置为预定义的属性列表。对于尺寸,只有一些非常具体的宽度 x 高度组合可用。参见示例:
然后选项 Create variations from all attributes 用于让 WooCommerce 生成这些变体的所有可能组合。所以我们最终得到这样的列表:
关键点是,现在我们需要 2 个标准元字段 Width & Height 来填充每个变体方式 自动 基于所选的维度自定义属性。像这样:
所以基本上(没有真正的代码):
if (selected Dimensions Attribute is "30 x 20 cm") set meta $width = 30 & meta $height = 20
if (selected Dimensions Attribute is "45 x 30 cm") set meta $width = 45 & meta $height = 30
if (selected Dimensions Attribute is "60 x 40 cm") set meta $width = 60 & meta $height = 40
etc.
当可变产品为saved/updated时,如果发生这种情况就足够了。解决方案可以非常简单,因为维度的属性列表是预定义的。
我知道这可能有点特殊,但我认为其他人可能也会对所需的功能感兴趣。
有人可以帮忙吗?
以下代码在保存变体时填充宽度和高度:
add_action("woocommerce_before_product_object_save", function ($product, $data_store) {
if ("variation" !== $product->get_type()) {
return;
}
$abmessung = $product->get_attribute("abmessung-3-2"); // use the text "60 x 40 cm"
$parse = explode(" ", $abmessung);
$product->set_props([
"width" => $parse[0],
"height" => $parse[2],
]);
}, 10, 2);
商店出售镶框图片。客户可以选择 框架 material 和 尺寸(预设宽度 x 高度组合列表)。 frame material 和 dimensions 都配置为预定义的属性列表。对于尺寸,只有一些非常具体的宽度 x 高度组合可用。参见示例:
然后选项 Create variations from all attributes 用于让 WooCommerce 生成这些变体的所有可能组合。所以我们最终得到这样的列表:
关键点是,现在我们需要 2 个标准元字段 Width & Height 来填充每个变体方式 自动 基于所选的维度自定义属性。像这样:
所以基本上(没有真正的代码):
if (selected Dimensions Attribute is "30 x 20 cm") set meta $width = 30 & meta $height = 20
if (selected Dimensions Attribute is "45 x 30 cm") set meta $width = 45 & meta $height = 30
if (selected Dimensions Attribute is "60 x 40 cm") set meta $width = 60 & meta $height = 40
etc.
当可变产品为saved/updated时,如果发生这种情况就足够了。解决方案可以非常简单,因为维度的属性列表是预定义的。
我知道这可能有点特殊,但我认为其他人可能也会对所需的功能感兴趣。
有人可以帮忙吗?
以下代码在保存变体时填充宽度和高度:
add_action("woocommerce_before_product_object_save", function ($product, $data_store) {
if ("variation" !== $product->get_type()) {
return;
}
$abmessung = $product->get_attribute("abmessung-3-2"); // use the text "60 x 40 cm"
$parse = explode(" ", $abmessung);
$product->set_props([
"width" => $parse[0],
"height" => $parse[2],
]);
}, 10, 2);