在WooCommerce中,woocommerce_payment_complete
钩子是在订单支付过程成功完成后触发的,这通常发生在用户通过支付网关(如PayPal、Stripe等)完成支付操作后。然而,当你在后台手动更改订单状态为“已完成”(例如,通过订单管理界面点击“完成订单”按钮)时,并不会触发 woocommerce_payment_complete
钩子,因为这个动作并不涉及支付过程的完成。
如果你需要在订单状态更改为“已完成”时执行某些操作,你应该使用与订单状态更改相关的钩子,如 woocommerce_order_status_changed
。这个钩子会在订单的任何状态更改时触发,包括从任何状态更改为“已完成”。
以下是如何使用 woocommerce_order_status_changed
钩子来检测订单是否已更改为“已完成”的示例:
function my_custom_order_status_changed_function($order_id, $old_status, $new_status, $order) { | |
// 检查订单的新状态是否为“已完成” | |
if ($new_status === 'completed') { | |
// 在这里执行你的代码 | |
// 例如,发送邮件、更新用户数据等 | |
// 打印订单ID到错误日志(仅作为示例) | |
error_log("Order {$order_id} has been manually marked as completed."); | |
} | |
} | |
// 将钩子与自定义函数关联 | |
add_action('woocommerce_order_status_changed', 'my_custom_order_status_changed_function', 10, 4); |
在这个示例中,当订单的状态发生更改时,my_custom_order_status_changed_function
函数会被调用,并接收四个参数:订单ID($order_id
)、旧状态($old_status
)、新状态($new_status
)和订单对象($order
)。函数内部,我们检查新状态是否为“completed”,如果是,则执行我们想要的操作。
请注意,woocommerce_order_status_changed
钩子在订单状态更改时非常通用,因此请确保你的逻辑只在你关心的状态更改时执行。在这个例子中,我们通过检查 $new_status
是否为 'completed'
来实现这一点。
0 个评论