在 WooCommerce 3+ 中将已付款订单标记为“已完成”,将未付款订单标记为“已取消”[重复]

Posted

技术标签:

【中文标题】在 WooCommerce 3+ 中将已付款订单标记为“已完成”,将未付款订单标记为“已取消”[重复]【英文标题】:Mark paid orders as "Completed" and non paid as "Cancelled" in WooCommerce 3+ [duplicate] 【发布时间】:2019-05-18 03:44:50 【问题描述】:

我的 WooCommerce 功能有一个小问题,应该以我想要的方式工作,但似乎有错误。我想将成功支付的订单标记为“已完成”,而不是在下达后停留在“处理中”,未成功支付的订单标记为“已取消”,而不是停留在“付款待处理”。这是我的错误功能:

add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );
function wc_auto_complete_paid_order( $order_id ) 

    if ( ! $order_id )
        return;

    // Get an instance of the WC_Product object
    $order = wc_get_order( $order_id );

    // No updated status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
    if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) 
        return;
        // Updated status to "completed" for paid Orders with all others payment methods
     elseif ( $order->has_status('processing') ) 
        $order->update_status( 'completed' );
    

【问题讨论】:

请重新描述问题,以便我们知道您所期望的行为,以及您如何确定您的代码不符合您的期望。 目前使用之前发布的代码,成功下单,标记为“已完成”,但未付款的订单卡在“等待付款”。 您的意思是它们永远不会更新,即使加载了“谢谢”页面?尝试在整个代码中插入一些 error_log() 语句,以跟踪执行流程。您没有指定太多上下文,但要考虑的一件事是,付款后并不总是显示“成功页面”。因此可能不是一个非常可靠的事件。 【参考方案1】:

你可以试试这样的:

add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order' );
function wc_auto_complete_paid_order( $order_id ) 

  if ( ! $order_id ) 
    return;
  

  $order = wc_get_order( $order_id );

  if( $order->has_status('processing') ) 
    $order->update_status( 'completed' );
   else 
    $order->update_status( 'cancelled' );
  


代码未经测试,我只是写下来。

如果有帮助,请告诉我;)

干杯, 弗朗切斯科

【讨论】:

以上是关于在 WooCommerce 3+ 中将已付款订单标记为“已完成”,将未付款订单标记为“已取消”[重复]的主要内容,如果未能解决你的问题,请参考以下文章

WooCommerce:根据运输方式自动完成已付款订单

WooCommerce 订单状态未正确分配 PayPal 付款

Woocommerce 订单在创建后获得付款

在后端删除付款详细信息 Woocommerce 订单页面

复制/复制订单 Woocommerce

WooCommerce REST API v2:如何处理付款?