[英]Add extra meta for orders in Woocommerce
我正在為我的網站創建一個自定義插件。
在這個插件的某些部分,我需要為每個訂單在wp_postmeta
存儲額外的元wp_postmeta
。
我在我的插件類中添加了這個:
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 全局變量,但我在我的插件中看不到它!
我的意思是我無法從我的插件或類似的東西訪問這個變量!
2018年的方式:
基於Guido WP答案,您可以在更輕量和更有效的版本代碼中使用woocommerce_checkout_create_order
動作掛鈎(使用WC 3+ CRUD 方法) :
add_action('woocommerce_checkout_create_order', 'before_checkout_create_order', 20, 2);
function before_checkout_create_order( $order, $data ) {
$order->update_meta_data( '_custom_meta_key', 'value' );
}
代碼位於活動子主題(或活動主題)的 function.php 文件中。
在 WooCommerce 3+ (僅)中測試和工作。
一些解釋:
woocommerce_checkout_create_order
操作掛鈎只是保存訂單數據之前的一步。 請參閱下面WC_Checkout
create_order()
方法(帶有兩個鈎子)的摘錄:
/**
* Action hook to adjust order before save.
* @since 3.0.0
*/
do_action( 'woocommerce_checkout_create_order', $order, $data );
// Save the order.
$order_id = $order->save();
do_action( 'woocommerce_checkout_update_order_meta', $order_id, $data );
return $order_id;
為什么使用
woocommerce_checkout_create_order
代替? :
- 因為你不需要使用
$order = wc_get_order( $order_id );
因為您已經將$order
作為掛鈎函數中的參數。- 你不需要使用
$order->save();
因為這將在無論如何之后完成(請參閱源代碼)- 這個鈎子自 WooCommerce 版本 3 以來已經發布,它的目的是相同的,允許使用所有可用的
WC_Order
方法。所以這僅適用於函數內的一行代碼。
基於 Mo Saeedi 的回答,我相信這個片段更符合 WooCommerce 3.0 引入的新 CRUD 方法:
add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) {
$order = wc_get_order( $order_id );
$order->update_meta_data( 'my_custom_meta_key', 'my data' );
$order->save();
} , 10, 2);
另請參閱 WordPress 論壇上的此主題:
答案是:我應該將woocommerce_checkout_update_order_meta
用於 add_action 並且我應該簡單地使用update_post_meta()
向我的訂單添加額外的元數據
function add_item_meta( $order_id ) {
//global $woocommerce;
update_post_meta( $order_id, '_has_event', 'yes' );
}
2016年的方式:
add_action('woocommerce_checkout_update_order_meta',function( $order_id, $posted ) {
update_post_meta( $order_id, 'my_custom_meta_key', 'my data' );
} , 10, 2);
$order_id
是訂單的id,存儲為自定義post類型$posted
是來自$_POST
所有數據
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.