我正在为我的网站创建一个自定义插件。
在这个插件的某些部分,我需要为每个订单在wp_postmeta
中存储额外的 meta。
我在我的插件的类中添加了这个:
add_action ('woocommerce_before_checkout_process', array( &$this, 'add_item_meta', 10, 2) );
这是add_item_meta()
函数:
function add_item_meta( $item_id, $values ) {
wc_add_order_item_meta($item_id, '_has_event', 'yes' );
}
此函数不完整,但此代码没有任何作用;我想我需要用另一个钩子,但我找不到合适的。
有人知道这件事吗?$item_id
还有另一个问题:这是woocommerce全局变量,但我在插件中看不到它!
我的意思是我没有访问这个变量从我的插件或类似的东西!
4条答案
按热度按时间hsgswve41#
2018年的方式:
基于 Guido W.P. 答案,您可以使用**
woocommerce_checkout_create_order
**动作挂钩代替更轻巧有效的版本代码 (使用WC 3+ CRUD methods):代码进入活动子主题(或活动主题)的function.php文件。
测试和工作在WooCommerce 3+ (仅)。
部分说明:
woocommerce_checkout_create_order
操作挂接只是保存订单数据之前的一个步骤。请参见以下WC_Checkout
create_order()
方法的摘录(带有两个挂接):为什么要改用
woocommerce_checkout_create_order
?:$order = wc_get_order( $order_id );
,因为你已经在挂钩函数中得到了**$order
**作为参数。$order->save();
,因为这将在之后完成 (参见源代码)WC_Order
方法。这只需要在函数中的一行代码就可以了。
hrirmatl2#
基于Mo Saeedi的回答,我相信这个片段更符合WooCommerce 3.0推出的new CRUD approach:
在WordPress论坛上也可以看到这个主题:
k3fezbri3#
答案是:我应该使用
woocommerce_checkout_update_order_meta
来执行add_action,而且我还应该简单地使用update_post_meta()
来向我的订单添加额外的 metamspsb9vt4#
2016年的方式:
$order_id
是订单的id,它存储为自定义post类型$posted
是$_POST
中的所有数据