订阅操作参考 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_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 文件中(或插件中)。应该可以。