我有一位客户需要销售非常定制的产品。该产品有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()
只能获得我为产品设置的变体(没有,任何 - 任何 - 任何 - 甚至没有出现),而不是用户所做的配置选择。 / p>
我如何在这里做出选择?
或者你将如何以不同的方式获得相同的结果?
我尝试过的其他事情:
cart-item-data.php
使用模板cart-item-data.php
在购物车页面上显示属性选项。我劫持了这个文件,使用它的变量来修改价格。这有效!然而它似乎没有设定价格,所以Woo的其他部分与它一起运行。这两款产品的小计和总计仍为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产品附加组件(link)
这是我的初步计划,直到我发现电子表格的复杂性超出了这个插件允许我做的任何数学运算。