fix: 新增 site_sync 條件,防止客戶未付款卻還是觸發 site_sync
Closed this issue · 1 comments
j7-dev commented
如果用戶下單後還沒付款
訂單狀態會是: 等待付款中
訂閱狀態會是: 待審核
要把這個 訂閱狀態 考慮進去,這樣就不做 site_sync
j7-dev commented
這個問題比預期中花更多時間
主要是因為找不到合適的 hook,一開始都在找創建相關的 hook
舊有的 hook
woocommerce_checkout_subscription_created
原本觸發是 訂閱創建時觸發
沒想到是 [訂單創建時] (是在 checkout 後就創還不知道付款有沒有成功),訂閱就創建了
新的 hook
woocommerce_subscription_payment_complete
是訂閱的付款完成之後
但其實續訂成功也會觸發,為了避免續訂也觸發,寫了以下判斷
if ( empty( $order ) || count( $order_ids ) !== 1 || $order_ids[0] !== $parent_order_id ) {
return;
}
小插曲是,本想調用 WC_Subscription
的 get_related_order_ids
方法
但 get_related_order_ids
是 protected
導致我必須繼承才能使用,但實在不想這樣繼承 (太多不必要的東西)
所以自己 copy 了 get_related_order_ids 方法來用