For the bank transfer (bacs) payment method,由于店长手动通过改变订单状态确认订单已支付,所以需要使用特殊的woocommerce_order_status_changed挂钩.

成功订单的状态可以从

  1. 等待处理,
  2. 等待完成,或
  3. 等待处理完成.

However, the action should only be fired once for each successful order.


我试图通过判断订单&& ! $order->get_date_paid('edit')的付款日期来实现这一点,但这似乎不是一个可行的解决方案,因为总是收到付款日期.

add_action( 'woocommerce_order_status_changed', 'bacs_payment_complete', 10, 4 );
function bacs_payment_complete( $order_id, $old_status, $new_status, $order ) {
  // 1. For Bank wire and cheque payments
  if( in_array( $order->get_payment_method(), array('bacs') 
  && in_array( $new_status, array('processing', 'completed') 
  && ! $order->get_date_paid('edit') ) {
    // Do something
  } 
}

推荐答案

为了让一些代码在这个函数中只执行一次,你需要像这样标记顺序:

add_action( 'woocommerce_order_status_changed', 'bacs_payment_complete', 10, 4 );
function bacs_payment_complete( $order_id, $old_status, $new_status, $order ) {
    // 1. For Bank wire and cheque payments
    if ( $order->get_payment_method() === 'bacs' 
    && in_array( $new_status, wc_get_is_paid_statuses() )
    && $order->get_meta('confirmed_paid') !== 'yes' ) 
    {
        $order->update_meta_data('confirmed_paid', 'yes'); // Tag the order
        $order->save(); // Save to database

        // Here the code to be executed only once
    } 
}

代码会在活动子主题(或活动主题)的functions.php文件中.它应该有用.

Php相关问答推荐

添加自定义Metabox到WooCommerce管理订单,启用HPOS

PHP cUrl扩展与v8.2.12更新损坏

从WooCommerce Checkout Country Select2下拉列表中重新排序国家/地区

WooCommerce管理订单列表自定义列不显示值

如何显示每个分类的当前术语的帖子中包含的前20个标签,不包括标签分类

创建一个新的可变产品及其属性以用于WooCommerce中的变体

从WooCommerce订单状态更改更新用户自定义元数据

按与WooCommerce管理顺序列表中的特定字符串不匹配的特定元值筛选订单

将一个情态形式放在细丝v3中的形式中间

WooCommerce在购物车项目中复制产品而不增加产品数量

将购物车按钮重定向到Checkout-Wooccommerce

除WooCommerce中的特定国家/地区外,有条件地要求填写邮政编码 checkout 字段

设置GA4 PHP API的setSubject以允许访问所有管理员账户属性

Laravel auth()->id() 在生产服务器中不工作

批量作业(job)提交错误无法处理所有文档,uris 似乎正确?

用于检测此模式的正则表达式:something;something=something,something=something... 未知次数

在 PHP 中验证签名

正则表达式抓取递归括号的内容

将样式文件或脚本引入WordPress模板

检测字符串是否包含Letter with Tilde或Letter + Combining Tilde