2017-07-19 163 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