1

我有一个客户需要销售非常定制的产品。该产品有 4 个属性,有 6、24、11 和 11 个选项。总共有超过 17000 种独特的组合。这些不能输入变化,因为 (1) 人工工作太多,(2) 它不必要地填充 WP 数据库,以及 (3) 它们的定价发生变化。

定价来自一个复杂的电子表格,每年需要调整几次。因为电子表格在网络上没有连接性,所以我将其转换为 API,此 API 需要的只是产品 ID 和每个属性的选择,它会返回价格。

我注意到,当我在属性字段中输入属性及其选项以及 1 个强制性的任意任意变体时,下拉列表会显示在前端,其中包含所有选项,访问者甚至可以将产品添加到购物车中。耶!

最后一部分我想不通。在购物车页面上,我需要根据所选属性操纵价格。我认为这段代码应该可以工作:

function prefix_get_api_price( $price, $product )
{
    // if we have a product that uses the price api
    if ( $product->is_type( 'variation' ) && get_field( 'has_api_price', $product->post->ID ) )
    {
        // get attributes
        $variation_attributes = $product->get_variation_attributes();
        // call the api, pass product id and chosen configuration
        $api_results = price_api( $product->id, $variation_attributes );
        // set the new/real/api price
        $price = $api_results['price'];
    }
    // return
    return $price;
}
add_filter( 'woocommerce_get_price', 'prefix_get_api_price', 10, 2 );

get_variation_attributes()只会得到我为产品设置的变体(没有,甚至没有出现任何任何任何任何内容),而不是用户所做的配置选择。

我如何在这里获得选择?

或者您将如何以不同的方式获得相同的结果?


我尝试过的其他事情:

cart-item-data.php

属性选择使用模板显示在购物车页面上cart-item-data.php。我劫持了这个文件,用它的变量来修改这里的价格。这行得通!然而,它似乎并没有设定价格,所以 Woo 的其他部分也随之运行。2 种产品的购物车小计和总计仍为 2 美元。(“系统”价格是 1 美元。)因为这也是一种非常 hacky 的方法,所以我没有进一步探索。

WC()->cart->get_cart()

此函数返回购物车中的所有内容,以及具有选定产品属性的产品数据。惊人的。在尝试将其与上述代码集成时,我不幸注意到没有可靠的方法来匹配产品get_cart()使用我在 woocommerce_get_price 挂钩函数中获得的数据。让我用一个例子来解释一下:我可以将 Custom Product Alpha 添加到我的购物车 3 次,配置 AAAA AABB 和 BBAA。现在钩子开始将定制产品传递给我。我想我可以说我得到的第一个是 AAAA,第二个是 AABB,第三个是 BBAA。我这样做了,但正如我在调试时已经注意到的那样,woocommerce_get_price 钩子被自定义产品触发的次数远不止每个产品一次,我不知道为什么,但确实如此。所以确定我为前 3 次设置了自定义价格,但随后又被系统默认值覆盖。我可能会循环这个.. 不,这些都不起作用,因为在钩子里面我没有得到所有的购物车可能是因为钩子首先被调用到购物车页面的一半。我可以' 甚至无法正确解释我对这个的尝试。即使它有效,它也将是一个肮脏的黑客。

Gravity Forms 产品附加组件(链接

这是我最初的计划,直到我发现电子表格的复杂性远远超出了这个插件允许我做的任何数学运算。

4

0 回答 0