在WooCommerce中自动删除取消的订单

时间:2016-11-22 作者:Dylan Smit

一直在浏览这个网站和互联网,但似乎找不到解决方案。我的客户希望每个订单状态被取消的订单在一段时间后完全从WooCommerce中删除。

<?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);    
   }    


}
我目前有上述代码片段,但我希望此操作延迟5分钟,因为待定订单可能仍在付款中。

So TL;状态为“已取消”、“失败”和“amp;”的DRORDER“挂起”应在5分钟后完全删除。

有谁能帮我解决这个问题吗?

向你问好Dylan

2 个回复
SO网友:Niket Joshi

在子主题函数中执行以下代码。php文件,如下所示。

function wc_remove_cancelled_status( $statuses ){
  if( isset( $statuses[\'wc-cancelled\'] ) ){
      unset( $statuses[\'wc-cancelled\'] );
  }
  return $statuses;
} 
add_filter( \'wc_order_statuses\', \'wc_remove_cancelled_status\' );

SO网友:CodeMascot

我认为用户可以在五分钟内更改订单状态。所以我用hook编写了下面的代码-

add_action( \'woocommerce_order_status_failed\', \'the_dramatist_woocommerce_auto_delete_order\' );
add_action( \'woocommerce_order_status_pending\', \'the_dramatist_woocommerce_auto_delete_order\' );
add_action( \'woocommerce_order_status_cancelled\', \'the_dramatist_woocommerce_auto_delete_order\' );

function the_dramatist_woocommerce_auto_delete_order( $order_id ) {
    // 5*60 = 300 seconds. Here 1minute = 60 seconds.
    wp_schedule_single_event(tim() + 300, \'the_dramatist_main_delete_event\', $order_id);
}

function the_dramatist_main_delete_event( $order_id ) {
    global $woocommerce;
    $order = new WC_Order( $order_id );
    $order_status = $order->get_status();
    if ( !$order_id )
        return false;
    if (\'cancelled\' == $order_status || \'failed\' == $order_status ||   \'pending\' == $order_status ) {
        wp_delete_post($order_id,true);
        return true;
    }
    return false;
}
在这里,我们通过钩子检测订单状态的变化,并在从睡眠中醒来后再次检查订单状态。因此,如果用户在五分钟内用更改订单状态,则不会发生删除。请测试一下。我没有测试过。希望对你有帮助。

P、 我想是美国sleep() 函数将导致WordPress生命周期延迟。所以我们最好使用wp_schedule_single_event 作用所以我更新了我的代码。

相关推荐

显示作者姓名PHP(自制插件)

我有一个需要帮助的问题,因为我自己找不到解决办法。我接管了一个网站,之前有人在那里创建了一个自制插件。。使用默认插件“Contact Form 7”,用户可以在页面上创建帖子。()https://gyazo.com/c8b20adecacd90fb9bfe72ad2138a980 )关于自行创建的插件“Contact Form 7 extender”,帖子是通过PHP代码在后台生成的(https://gyazo.com/115a6c7c9afafd2970b66fd421ca76a3)其工作原理如下:如果