woocommerce_subscription_ payment_complete 未在续订订单上运行

问题描述 投票:0回答:1

订阅操作参考 https://woocommerce.com/document/subscriptions/develop/action-reference/ 显示

woocommerce_subscription_payment_complete
应在新订单和续订订单上运行。

但是,我在服务器日志中看不到任何续订订单的内容(例如“RUNNING woocommerce_subscription_ payment_complete”),我只看到新订单的 error_log 条目。

这是否是因为续订订单作为计划操作运行,因此不会出现在正常的 error_log 输出中?

这是我的代码:

add_action( 'woocommerce_subscription_payment_complete', function( $subscription ) {
    error_log('RUNNING woocommerce_subscription_payment_complete');
    
    // Getting the user ID from the current subscription object
    //with HPOS woocommerce recommends using $order->get_meta() instead of get_post_meta() when retrieving order metadata
    //documented here: https://developer.woocommerce.com/2023/03/07/woocommerce-subscriptions-hpos-understanding-next-steps/
    $user_id = $subscription->get_meta('_customer_user', true);

    // create a WP User object given the user_id
    $user = new WP_User($user_id);
    // Set the user to customer role
    $user->set_role( 'customer' );
    error_log('WOO-SUBSCRIPTION-PAYMENT-COMPLETE...ROLE SET TO CUSTOMER: ' . $user_id);
    
    //mark order status as completed
    $current_order = $subscription->get_last_order( 'all', 'any' );
    $current_order->update_status( 'completed' );
    
}, 100);
woocommerce hook-woocommerce woocommerce-subscriptions
1个回答
0
投票

而是使用

woocommerce_subscription_renewal_payment_complete
操作挂钩,如下所示:

add_action( 'woocommerce_subscription_renewal_payment_complete', 'add_order_meta_from_custom_user_meta', 10, 2 );
function add_order_meta_from_custom_user_meta( $subscription, $last_order ) {
    if( ! $subscription ) {
        return;
    }

    $user = $last_order->get_user(); // Get the user

    if( ! in_array('customer', $user->roles) ) {
        $user->set_role( 'customer' );
    }

    if( ! $last_order->has_status('completed') ) {
        $last_order->update_status( 'completed' );
    }
}

代码位于子主题的functions.php 文件中(或插件中)。应该可以。

© www.soinside.com 2019 - 2024. All rights reserved.