簡體   English   中英

在 Woocommerce 中為訂單添加額外的元數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM