在我掉进这个兔子洞之前……
我的某个产品类别实际上是从其他4种产品中选择的一种。它可以是精选产品的任意组合。定价基于这些产品的正常价格。
我到目前为止所做的一切
通过常规WooCommerce属性界面控制。管理员输入了属性use-for-custom
,其值为项目的类别,即cupcakes
结果是与custom-assortment
类别中的cupcakes
产品相联系。在custom-assortment
类别的cupcakes
产品中,这四个选项中的任何一个/全部都是该产品的选项。
我在functions.php中也有一个函数,该函数查询具有此set属性的所有产品,并构建一个整齐的id / title / cost小数组。我早些时候通过this post进行了管理,
$useable = array();
foreach ($products as $product){
$useable[] = array(
'id' => $product->ID,
'name' => $product->post_title,
'desc' => $product->post_excerpt,
'cost' => floatval(wc_get_product($product->ID)->get_price())/4
//cost is 1/4 as 4 will be selected to create 1 new product
);
}
注释
实际上不需要将选择与特定产品相关联。对于管理员来说,以最终顺序显示所选的产品名称就足够了。但是,保留该引用会很好,因为稍后可能会导致其他功能。
目前不关心库存,也不关心所选产品的其他任何属性(价格除外)。
想法
我已经尝试了一些方法,以通过LoicTheAztec的this post以编程方式创建自定义变体,但是到目前为止,我还没有看到它们。我也许可以多戳一点,因为他的东西通常都是现货。
foreach ($useable as $useit){
$display = $useit['name'] . " (" . $useit['cost'] . ")";
$variation_data = array(
'attributes' => array(
'flavor-one' => $display,
'flavor-two' => $display,
'flavor-three' => $display,
'flavor-four' => $display
),
'sku' => '',
'regular_price' => $useit['cost'],
'sale_price' => ''
);
var_dump($product->get_id());
create_product_variation($product->get_id(), $variation_data);
}
或者,我可能可以手动创建下拉选择,然后根据选择对价格运行过滤器。但这似乎是很多手动重新创建的功能-检查有效性,价格等。
最终问题
是否已经可以使用一种产品作为另一种产品的可变产品属性?这似乎并不遥不可及,但是我还不能对任何东西进行谷歌愚弄。我的google-foo最近不太好。
答案 0 :(得分:1)
假设一个产品可以是10个其他产品中的4个的任意组合,则使用变体意味着添加了10,000个可能的产品。这似乎是不合理的,所以我选择了另一种方式。
很快就会用代码扩展这个答案,但是基本上是:
查询帖子以获取具有自定义属性的产品类型帖子,并使用此可配置选项将其分组。将它们输出为选择元素,并带有购物车表单中的项目选项。选项值作为产品ID,并显示为该选项的产品名称+价格。
转到“添加到购物车”操作以检查选项(在$ _POST中传递),并将其作为属性存储在购物车项目中。
转到购物车价格过滤器,并使用购物车项目属性根据分类产品的原始价格计算最终产品价格。
也: