【问题标题】:Change admin payment status back to unpaid for pending order status in Woocommerce在 Woocommerce 中将待处理订单状态的管理员付款状态更改回未付款
【发布时间】:2019-02-21 07:15:28
【问题描述】:

当 Woocommerce 中的订单状态更改为处理中时,付款状态设置为已付款

但订单被意外设置为处理中,不应该获得已付款状态。现在,当我们再次将状态设置为挂起时,它不会删除文本:

订单 #1234 详情
通过采购订单付款。于 2018 年 9 月 17 日上午 9:18 支付

知道如何将此文本更改为状态更改之前的内容吗?

【问题讨论】:

    标签: php wordpress woocommerce metadata


    【解决方案1】:

    使用以下代码将重置(清空)付费日期,因此它将删除付费消息。

    因此,每次将状态为“处理中”、“已完成”或“暂停”的订单转回“待处理”状态时,付款日期都会被清空。

    代码:

    add_action( 'woocommerce_order_status_changed', 'reset_order_paid_date', 20, 4 );
    function reset_order_paid_date( $order_id, $old_status, $new_status, $order ){
        if ( in_array( $old_status, array('on-hold', 'processing', 'completed') ) && $new_status == 'pending' ) {
            $order->set_date_paid(null);
            $order->save();
        }
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试并且可以工作。

    为了使它对您的问题订单有效,只运行一次以下代码,将其粘贴到 function.php 子主题的文件中。然后浏览您网站的任何页面并将其删除……
    (其中123 是您必须用您的订单 ID 替换的订单 ID)

    $order = wc_get_order( 123 ); // <== HERE set your order number
    $order->set_date_paid(null);
    $order->save();
    

    相关: Set back date paid on paid order statuses change in WooCommerce

    【讨论】:

    • 谢谢,非常感谢!我在这一行只收到一个错误:$order->set_date_paid(null); 但无论如何都不需要。谢谢。