2017-07-19 7 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のために、各サブスクリプション 更新のすべての詳細を格納します。

これらの注文は関係なく、常に彼らが手動でWooCommerce>編集購読 管理画面を経由して、予定さ リニューアルイベント用に作成されているかどうかの、wcs_create_renewal_order() 関数を使用して作成された、またはのためのサブスクリプションのエンドポイントを経由して 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

関連する問題