【发布时间】:2020-05-28 12:11:09
【问题描述】:
在我的场景中,将订阅订单添加到当前用户的购物车中,其中包含用于计算有关订阅的其他数据的附加数据,例如下一个续订日期、订阅价格等。通过使用以下方法可以很好地工作:
$woocommerce->cart->add_to_cart($product->get_id(), '1', '0', array(), array(
PVS_META_DATA_KEY_INPUTS => $test_data['result']['inputs'],
PVS_META_DATA_KEY_MONTHS => $test_data['result']['month-data'],
PVS_META_DATA_KEY_PRODUCTS => $test_data['result']['product-data']
));
除此之外,我的最后一步是从购物车的自定义数据中获取月份和产品元数据,并将其与订阅一起存储,以实现订单履行。我的研究表明我可能需要使用woocommerce_checkout_create_order_line_item 操作。以下是我的代码:
function pvs_woocommerce_checkout_create_order_line_item($item, $cart_item_key, $values, $order)
{
var_dump($item);
echo '<br />';
var_dump($cart_item_key);
echo '<br />';
var_dump($values);
echo '<br />';
var_dump($order);
if (isset($values[PVS_META_DATA_KEY_INPUTS]))
{
$item->add_meta_data(PVS_META_DATA_KEY_INPUTS, json_encode($values[PVS_META_DATA_KEY_INPUTS]));
}
if (isset($values[PVS_META_DATA_KEY_MONTHS]))
{
$item->add_meta_data(PVS_META_DATA_KEY_MONTHS, json_encode($values[PVS_META_DATA_KEY_MONTHS]));
}
if (isset($values[PVS_META_DATA_KEY_PRODUCTS]))
{
$item->add_meta_data(PVS_META_DATA_KEY_PRODUCTS, json_encode($values[PVS_META_DATA_KEY_PRODUCTS]));
}
}
add_action('woocommerce_checkout_create_order_line_item', 'pvs_woocommerce_checkout_create_order_line_item', 10, 4);
但是,在结帐时,我从未获得此操作的输出。检查 WooCommerce 状态页面,没有返回任何错误 - 所以如果它失败了,它就会默默地失败。作为健全性检查,我还使用以下函数/操作来查看它是否被调用而另一个失败:
function idk_im_losing_my_mind_tho($item, $cart_item_key, $values, $order)
{
echo 'Please work ;(';
}
add_action('woocommerce_checkout_create_order_line_item', 'idk_im_losing_my_mind_tho', 10, 4);
关于 a) 让此操作开始触发或 b) 在结帐后将购物车数据存储在订单中,这里有什么建议吗?
我们使用的是 WordPress 5.3.2 版、WooCommerce 3.9.1 版和 WooCommerce 订阅 3.0.1 版。非常感谢任何帮助!
【问题讨论】:
-
这能回答你的问题吗? Add extra meta for orders in Woocommerce
-
@caiovisk 最佳答案建议使用
woocommerce_checkout_update_order_meta操作。这可能有效,但问题是购物车当前包含我的所有自定义数据。您能否建议一种将购物车中的数据获取到此操作的方法?
标签: php wordpress woocommerce action woocommerce-subscriptions