上下文
我们销售纯数字产品。
每个售出的商品都需要一个新的univoque产品密钥,其中密钥取决于商品本身
目标
用户在商店上购买商品
付款后,但在wooccommerce向用户发送电子邮件之前,wooccommence会询问我们的服务器令牌发送项目的详细信息。
每个项目的产品密钥都保存到项目详细信息中
将向用户发送电子邮件,其中包含每个项目的产品密钥
我已经能做什么了
我用做了一些实验
add_action( 'woocommerce_order_status_changed', 'so_payment_complete' );
我已经可以了
获取订单实例
获得订单项目
每个订单项
- 获取WC_Product
- 提取所需的WC_Product_Attribute
- 使用
wp_remote_post
与我们的api服务器进行对话
实际上我已经完成了90%的工作。
我不知道该怎么做
我需要将从我们的api服务器收到的产品密钥存储到订单项的数据中。
所以我的问题分为两部分:
使用哪些操作或筛选器来代替
woocommerce_order_status_changed
?我需要在订单支付后,但在用户收到其订单详细信息邮件之前被解雇的东西如何将产品密钥设置到每个订单项目中,我真的在wooccommerce文档中找不到合适的方法
在提交电子邮件之前尝试操作woocommerce_checkout_update_order_meta
https://docs.woocommerce.com/wc-apidocs/source-class-WC_Checkout.html#401-403
,您可以将密钥保存在类似的元值上:
foreach ($order->get_items("line_item") as $id_line_item => $item) {
// ...
update_post_meta($id_line_item, "product_key", $product_key);
}
然后你可以这样读:
$product_key = get_post_meta($id_line_item, "product_key", TRUE);