在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 个评论