使用其他产品作为选项-WooCommerce

时间:2019-04-23 12:07:39

标签: wordpress woocommerce

在我掉进这个兔子洞之前……

我的某个产品类别实际上是从其他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最近不太好。

1 个答案:

答案 0 :(得分:1)

假设一个产品可以是10个其他产品中的4个的任意组合,则使用变体意味着添加了10,000个可能的产品。这似乎是不合理的,所以我选择了另一种方式。

很快就会用代码扩展这个答案,但是基本上是:

查询帖子以获取具有自定义属性的产品类型帖子,并使用此可配置选项将其分组。将它们输出为选择元素,并带有购物车表单中的项目选项。选项值作为产品ID,并显示为该选项的产品名称+价格。

转到“添加到购物车”操作以检查选项(在$ _POST中传递),并将其作为属性存储在购物车项目中。

转到购物车价格过滤器,并使用购物车项目属性根据分类产品的原始价格计算最终产品价格。

也:

  • 将属性显示添加到购物车
  • 添加前端控件以显示具有变化属性的变化价格