2017-07-19 85 views
2

我想知道是否有一個動作掛鉤可以檢查訂閱是否在woocommerce中成功續訂?順便說一句我正在使用woocommerce訂閱插件。我創建了一項功能,記錄訂購訂單的日期並將其添加到CSV文件中,該功能對於第一次購買非常合適,我的意思是當用戶購買訂閱時,它已成功記錄在CSV中,因爲我正在啓動woocommerce_thankyou動作鉤子上的函數,我面對的唯一問題是,我似乎無法找到一個鉤子,它可以在成功訂閱續訂時執行此功能。我試圖使用woocommerce_subscription_renewal_payment_complete動作鉤子,但它沒有在下面工作是我創建的功能。Woocommerce動作掛鉤在訂閱續訂時執行功能

/** 
* Add subscriptions to csv. 
*/ 

add_action('woocommerce_subscription_renewal_payment_complete', 'add_subs_to_csv'); 
add_action('woocommerce_thankyou', 'add_subs_to_csv'); 
function add_subs_to_csv($order_id) { 
    $order = wc_get_order($order_id); 
    $items = $order->get_items(); 
    foreach ($items as $key => $value) { 
     $meta_values = $value->get_data(); 
     foreach ($meta_values as $meta_key => $meta_value) { 
      if ($meta_key == 'product_id' && $meta_value == 875) { 
       $paid_date  = explode(" ", get_post_meta($order_id, '_paid_date', true)); 
       $subs_paid_date = date('d F, Y', strtotime($paid_date[0])); 
       wc_add_order_item_meta($key, 'Delivery Date', $subs_paid_date); 
      } 
     } 

    } 
} 

回答

0

請問wcs_renewal_order_created掛鉤是你要找的嗎?該文件說:

WooCommerce訂閱存儲所有在一個標準的WooCommerce爲了每個訂閱 續約的細節,只能用特殊的元標記 其鏈接到一個訂閱。

這些訂單總是通過wcs_create_renewal_order() 函數創建的,而不管它們是否針對所調度 更新事件創建,經由WooCommerce>編輯訂閱 管理屏幕手動,或者通過訂閱端點的 WooCommerce REST API。因此,可以使用此過濾器添加,刪除或更新該續訂訂單上任何內容的值。

例如,這可以用來爲特定續訂 訂單添加折扣,如每年的第12個訂單。它也可以用來爲某個續訂訂單添加一次性費用 ,例如按月訂購的特殊年度額外 費用。

所以上面的鉤子應該付款後觸發,你可能只需要檢查它是否已完成狀態,你同樣可以做到在當前的掛鉤:

/** 
* After WooCommerce Subscriptions Creates Renewal Order 
* 
* @param WC_Order Object $order 
* @param Integer|WC_Subscription Object $subscription 
* 
* @return void 
*/ 
function add_subs_to_csv($order, $subscription) { 

    if('completed' === $order->get_status()) { 
     $items = $order->get_items(); 
     foreach ($items as $key => $value) { 
      $meta_values = $value->get_data(); 
      foreach ($meta_values as $meta_key => $meta_value) { 
       if ($meta_key == 'product_id' && $meta_value == 875) { 
        $paid_date  = explode(" ", get_post_meta($order_id, '_paid_date', true)); 
        $subs_paid_date = date('d F, Y', strtotime($paid_date[0])); 
        wc_add_order_item_meta($key, 'Delivery Date', $subs_paid_date); 
       } 
      } 

     } 
    } 

} 
add_action('wcs_renewal_order_created', 'add_subs_to_csv', 10, 2); 
+0

我在同一個工作東西,幾乎相同,我會實施你的建議,看看它是否工作...將報告回來..謝謝 – FaISalBLiNK