我使用的付款网关之一将订单状态从"处理"更改为"失败"或每当交易失败或用户取消事务时。当客户后来试图支付失败的订单时,付款网关会丢弃错误"重复订单ID"。因此,为避免此问题,我想在发生时自动降低失败的订单。
这个网站上有类似的问题,但是给出的解决方案似乎不起作用。
那里提到的代码看起来像这样。
<?php
function update_order_status( $order_id ) {
$order = new WC_Order( $order_id );
$order_status = $order->get_status();
if ('cancelled' == $order_status || 'failed' == $order_status || 'pending' == $order_status ) {
wp_delete_post($order_id,true);
}
}
您可以使用此自定义函数挂在woocommerce_order_status_changed
Action Hook中,该功能在订单状态更改时会触发。
您需要在功能中设置相关付款网关(网关ID)…
当状态更改为"取消"并从"处理"到"失败"状态时,此功能将检测订单状态更改(对于此定义的付款网关)。
因此,对于此特定的付款网关和此特定订单状态的变化,与当前订单有关的所有数据将完全从数据库中删除。
在WooCommerce中 代码: 代码在您的活动子主题(或主题)或任何插件文件中的function.php文件中。 测试并起作用。add_action( 'woocommerce_order_status_changed', 'auto_destroy_failed_orders', 10, 4 );
function auto_destroy_failed_orders( $order_id, $old_status, $new_status, $order ){
// HERE set your payment Gateway ID (look in WC settings > checkout to get the Gateway ID)
$gateway_id = 'paypal';
if ( $order->get_payment_method() != $gateway_id ) return; // Only for this payment gateway
if ( ( $old_status == 'processing' && $new_status == 'failed' ) || $new_status == 'cancelled' ) {
wp_delete_post( $order_id, true );
}
}
不便再过……我试图使用
wp_schedule_single_event()
延迟,但我无法使用它……