【问题标题】:Auto complete orders when a renewal successful payment is made on a subscription in WooCommerce在 WooCommerce 中对订阅进行续订成功付款时自动完成订单
【发布时间】:2019-09-18 01:47:08
【问题描述】:

我正在使用 WooCommerce 订阅插件进行订阅,它在订阅续订时重复订单,我需要的是,在成功订阅续订付款后创建订单重复订单时,订单状态应更改为已完成。

我尝试使用以下钩子失败:

  • woocommerce_renewal_order_payment_complete
  • woocommerce_order_status_changed
  • woocommerce_payment_complete

【问题讨论】:

    标签: php wordpress woocommerce orders woocommerce-subscriptions


    【解决方案1】:

    对于 WooCommerce 订阅,您需要使用 woocommerce_subscription_payment_complete 操作挂钩,该挂钩在订阅续订付款时触发。

    您可以尝试以下操作,将当前订单状态更新为已完成:

    add_action('woocommerce_subscription_payment_complete', 'subscription_payment_complete_hook_callback', 10, 1);
    function subscription_payment_complete_hook_callback( $subscription ) {
        // Get the current order
        $current_order = $subscription->get_last_order( 'all', 'any' );
    
        // For Paypal recurring orders
        if( $current_order->get_payment_method() === 'paypal' ) {
    
            // Update status to completed
            $current_order->update_status('completed');
        }
    }
    

    相关文档:WooCommerce Subscriptions action hooks

    【讨论】:

    • 每次创建新订单或续订订阅时都会调用此钩子吗?
    【解决方案2】:

    我相信对于续订应该使用的钩子是:woocommerce_subscription_renewal_payment_complete

    这也接受 $subscription 参数

    【解决方案3】:

    在 2021 年,WooCommerce Subscription API 发生了变化,这似乎奏效了:

    /*Auto Complete all WooCommerce orders.*/
    add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
    function custom_woocommerce_auto_complete_order( $order_id ) { 
        if ( ! $order_id ) {
            return;
        }
    
        $order = wc_get_order( $order_id );
        $order->update_status( 'completed' );
    }
    
    /*Auto Complete all WooCommerce Renewal Subscription orders.*/
    add_action('woocommerce_subscription_renewal_payment_complete', 'subscription_renewal_payment_complete_callback', 10, 2);
    function subscription_renewal_payment_complete_callback( $subscription, $order ) {
        $order->update_status('completed');
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-11
      • 2020-01-17
      • 2020-03-15
      • 1970-01-01
      • 2016-04-17
      • 2020-02-07
      • 2021-01-07
      • 2018-06-26
      • 2020-11-03
      相关资源
      最近更新 更多