j7-dev/wp-power-partner

fix: 新增 site_sync 條件,防止客戶未付款卻還是觸發 site_sync

Closed this issue · 1 comments

如果用戶下單後還沒付款

訂單狀態會是: 等待付款中

訂閱狀態會是: 待審核

要把這個 訂閱狀態 考慮進去,這樣就不做 site_sync

這個問題比預期中花更多時間

主要是因為找不到合適的 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_Subscriptionget_related_order_ids 方法
get_related_order_idsprotected
導致我必須繼承才能使用,但實在不想這樣繼承 (太多不必要的東西)
所以自己 copy 了 get_related_order_ids 方法來用