【问题标题】:Most reliable hook for setting next renewal payment date after order下订单后设置下一个续订付款日期的最可靠挂钩
【发布时间】:2021-09-12 14:57:48
【问题描述】:

我们在 Woocommerce 订阅设置中遇到了默认同步选项不起作用的情况。我创建了一个手动日历,我的functions.php 文件在订阅创建时引用它,但它只在订阅创建时检查,然后插件自动将下一次续订设置为此后每 4 周。

我需要在每次创建订阅和/或续订后触发我的续订日期检查器功能,以从我的日历中计算下一个续订日期。我知道我至少可以尝试两个钩子,它们是: wcs_renewal_order_createdwoocommerce_subscription_payment_complete,但我不知道它们什么时候被触发,不知道哪个是最安全的。

关于woocommerce_subscription_payment_complete,WC 订阅文档说:

在订阅付款时触发。这可以是初始订单或续订订单的付款。但是,重要的是要注意,与提前续订相关的订阅日期更改的处理方式与其他续订不同,因此不应依赖此操作来捕获订阅的下一个付款日期。

我不能 100% 确定他们在笔记中提到的案例,但这足以让我停下来。

关于wcs_renewal_order_created,我不清楚何时这会触发:

这些订单始终是通过 wcs_create_renewal_order() 函数创建的,无论它们是通过 WooCommerce > 编辑订阅管理屏幕手动创建的,还是通过 WooCommerce REST API 的订阅端点创建的。因此,可以使用此过滤器添加、删除或更新续订订单上任何内容的价值。

例如,这可用于为特定续订订单添加折扣,例如每年的第 12 个订单。它还可以用于为某个续订订单添加一次性费用,例如按月订阅的特殊年度额外费用。

在此钩子期间是否会尝试通过update_dates() 设置next_date 密钥来推送即将处理的当前付款或已经发生的付款,因此现在设置下一个日期是安全的?

在处理给定订阅的当前周期之后立即以编程方式设置下一个续订日期的最可靠方法是什么?

【问题讨论】:

    标签: wordpress woocommerce woocommerce-subscriptions


    【解决方案1】:

    免责声明:我分享我的推理和初步信息,我没有做任何实际检查。

    根据描述,这两个钩子都与所需的事件无关:wcs_renewal_order_created 响应订阅订单的创建,woocommerce_subscription_payment_complete 响应此类订单的付款。但是这两点都对创建或续订订阅的“簿记理由”负责,而不是对创建或续订本身负责。

    我建议测试woocommerce_helper_subscription_activate_success钩子,可以在class-wc-helper.php中找到:

    /**
     * Active a product subscription.
     */
    private static function _helper_subscription_activate() {
    
        // ...
    
        if ( $activated ) {
            /**
             * Fires when the Helper activates a product successfully.
             *
             * @param int    $product_id Product ID being activated.
             * @param string $product_key Subscription product key.
             * @param array  $activation_response The response object from wp_safe_remote_request().
             */
            do_action( 'woocommerce_helper_subscription_activate_success', $product_id, $product_key, $activation_response );
        } else {
    
        // ...
    

    看起来这个钩子响应订阅成功激活的那一刻。并且有可能这不仅意味着订阅的初始激活时刻,还意味着随后的续订。

    这可以通过以下代码来完成,例如:

    function test_woocommerce_helper_subscription_activate_success( $product_id, $product_key, $activation_response ) { 
       // your code here
    } 
    add_action('woocommerce_helper_subscription_activate_success', 'test_woocommerce_helper_subscription_activate_success', 10, 3);
    

    【讨论】:

    • 啊,有趣!所以(对我来说)真正的问题变成了——这也会引发订阅续订吗?
    • “提前续订”对我没有用,@armadadrive 对你有用吗?
    • 我们决定不允许提前续订,因此我们还没有对这种情况进行测试。
    猜你喜欢
    • 2020-02-07
    • 2013-03-22
    • 2016-09-01
    • 2015-10-18
    • 2019-06-19
    • 2018-01-10
    • 1970-01-01
    • 2012-12-31
    • 1970-01-01
    相关资源
    最近更新 更多