Подписки WooCommerce - Акция по первоначальному взносу

Я использую плагин WooCommerce для подписок, в частности woocommerce_subscription_payment_complete функция.

Я использую это так:

add_action('woocommerce_subscription_payment_complete','subscription_created');
function subscription_created($subscription) {
    echo 'Run when subscription payment is complete';
}

Это работает, но также срабатывает при завершении оплаты за продление. Кто-нибудь знает способ определить, был ли платеж за первоначальную подписку, а не за продление?

1 ответ

Решение

Вы могли бы использовать woocommerce_checkout_subscription_createdОднако проблема в том, что он сработает до обработки платежа - и я предполагаю, что вам нужно сработать даже после того, как платеж был успешным.

Одним из способов решения этой проблемы является установка мета в записи подписки, которая обозначает, была ли запущена ваша пользовательская функция, и проверка этой меты с помощью if утверждение как это:

add_action('woocommerce_subscription_payment_complete','subscription_created');
function subscription_created($subscription) {
    //check if meta exists/is not true
    if (!get_post_meta($subscription->id, 'has_my_function_run', true)) {
        //update meta to bool(true)
        update_post_meta($subscription->id, 'has_my_function_run', true);
        //run your function
        echo 'Run when subscription payment is complete';
    }  
}

Я уверен, что есть лучший способ приблизиться к этому, так что следите за другими ответами. Это может быть хорошей идеей, чтобы заглянуть в woocommerce_order_status_processingпроверить, содержит ли он продукт по подписке, а затем запустить вашу функцию, но это не сработает, если WooCommerce генерирует новый заказ для каждого продления подписки.

Другие вопросы по тегам