在 WooCommerce 中,你可以通过代码来更新订单的 支付方式 和 支付状态,一般使用 WC_Order 类的方法来操作。
✅ 示例:通过 PHP 更新订单的支付方式和支付状态
php复制编辑$order = wc_get_order($order_id);
if ($order) {
// 设置支付方式(如:wechat, alipay, cod, bacs, etc.)
$order->set_payment_method('wechat'); // 设置支付方式 slug
$order->set_payment_method_title('微信支付'); // 设置支付方式名称(可选)
// 设置订单状态(如:pending, processing, completed, on-hold, cancelled, refunded, failed)
$order->update_status('processing', '已完成微信支付');
// 保存订单
$order->save();
}
🧾 常用的支付状态值(status)
| 状态值 | 含义 |
|---|---|
pending | 等待付款 |
processing | 已付款,正在处理 |
completed | 已完成 |
on-hold | 等待付款(已下单) |
cancelled | 已取消 |
refunded | 已退款 |
failed | 付款失败 |
✅ 示例:完整函数封装
php复制编辑function update_order_payment($order_id, $method_slug, $method_title = '', $status = 'processing') {
$order = wc_get_order($order_id);
if (!$order) {
return new WP_Error('order_not_found', '订单不存在');
}
// 设置支付方式
$order->set_payment_method($method_slug);
if ($method_title) {
$order->set_payment_method_title($method_title);
}
// 更新订单状态
$order->update_status($status, '支付成功,更新订单状态');
// 保存订单
$order->save();
return true;
}
✅ 用法示例:
php复制编辑update_order_payment(1234, 'wechat', '微信支付', 'processing');
在 WooCommerce 中,支付完成时记录支付时间 的做法是调用 $order->payment_complete(),该方法会自动:
- 设置支付状态为
processing(或虚拟产品为completed) - 记录支付时间(
_paid_date) - 触发相关钩子(如
woocommerce_payment_complete)
推荐做法:记录支付时间并更新状态
php复制编辑$order = wc_get_order($order_id);
if ($order) {
// 设置支付方式
$order->set_payment_method('wechat');
$order->set_payment_method_title('微信支付');
// 记录支付完成(自动设置状态+支付时间)
$order->payment_complete(); // ✅ 推荐方法:自动记录 _paid_date
// 可选:添加备注
$order->add_order_note('微信支付完成,自动记录支付时间');
}
⏰ 如果你想“手动”设置支付时间:
虽然 payment_complete() 已自动处理,但你也可以手动设置:
php复制编辑$order->set_date_paid(current_time('timestamp')); // 设置为当前时间
$order->save();
⚠️ 建议只在你自定义支付网关、或
payment_complete()不满足时才手动设置。
🔍 查询支付时间
你可以通过:
php复制编辑$paid_date = $order->get_date_paid(); // 返回 WC_DateTime 对象
转为格式化字符串:
php复制编辑echo $paid_date ? $paid_date->date('Y-m-d H:i:s') : '未支付';