簡體   English   中英

在 WooCommerce 中添加一些用戶用戶元數據作為訂單元數據

[英]Add some user user meta data as order meta data in WooCommerce

客戶創建訂閱並通過 WooCommerce 告訴我他需要什么。 使用用戶元數據將需求存儲在用戶配置文件中。 當他在前端的 WooCommerce 我的帳戶區域中更新此內容時,它會在 Wordpress 客戶資料中正常更新。 那里沒有問題。

我遇到的問題是,當他通過前端 WooCommerce 帳戶區域內的自定義字段更新需求時,訂閱會一遍又一遍地更新他的舊需求。 我如何讓它在訂閱續訂時使用在帳戶區域內找到的最新自定義字段數據?

示例: https://i.stack.imgur.com/UEMpY.png

這就是我目前所擁有的。 在下面的示例中,我嘗試將用戶元數據復制到訂單元數據,並在訂閱續訂時對其進行更新。 由於某種原因,它沒有更新。 也許這是錯誤的方式。 我的 PHP 非常有限。 任何人都可以建議嗎?

// update subscription meta order
add_action('woocommerce_subscription_renewal_payment_complete','subscription_renew');
function subscription_renew( $order_id ) {

   $order = wc_get_order( $order_id ); // get the order id
   $user_id = $order->get_user_id(); // get the user id

   if ( $order->get_total() > 1 ) {  // not sure why this is here

   $getsend = get_user_meta( $user_id, 'send' ); // grab the user meta field 'send'
   $getcategories = get_user_meta( $user_id, 'categories' ); // grab the user meta field 'categories'

      // now do the update
      $order->update_meta_data( $user_id, 'send', $getsend ); // update user order meta field 'send'
      $order->update_meta_data( $user_id, 'categories', $getcategories ); // update user order meta field 'categories'
      $order_id = $order->save(); // save the order

      return $order_id;

   }

}

您的代碼中有一些錯誤。 您應該從以下位置刪除$user_id參數:

  // now do the update
  $order->update_meta_data( $user_id, 'send', $getsend ); // update user order meta field 'send'
  $order->update_meta_data( $user_id, 'categories', $getcategories ); // update user order meta field 'categories'

替換為:

  // now do the update
  $order->update_meta_data( 'send', $getsend ); // update user order meta field 'send'
  $order->update_meta_data( 'categories', $getcategories ); // update user order meta field 'categories'

現在它應該更好地工作。


woocommerce_subscription_renewal_payment_complete掛鈎相關的更新

在查看文檔和其他一些代碼示例時,這個鈎子似乎有 2 arguments: $subscription$last_order (但不是$order_id )

這是一個應該真正起作用的不同代碼版本,將您的自定義用戶數據添加到最后一個相關的續訂訂單中,作為訂單元數據:

add_action( 'woocommerce_subscription_renewal_payment_complete', 'add_order_meta_from_custom_user_meta', 10, 2 );
function add_order_meta_from_custom_user_meta( $subscription, $last_order ) {
    if( ! $subscription ) 
        return;

    $user_id = $last_order->get_user_id(); // Get the user id

    if( $send = get_user_meta( $user_id, 'send', true ) ) {
        $last_order->update_meta_data( 'send', $send );
    }

    if( $categories = get_user_meta( $user_id, 'categories', true ) ) {
        $last_order->update_meta_data( 'categories', $categories );
    }

    if( isset($send) || isset($categories) ) {
        $last_order->save();
    }
}

代碼位於活動子主題(或活動主題)的 function.php 文件中。 它應該更好地工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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