【问题标题】:WooCommerce trigger a function on order status completeWooCommerce 在订单状态完成时触发功能
【发布时间】:2016-08-01 18:19:53
【问题描述】:

我正在尝试在订单完成时触发一个功能。我正在使用此代码:

add_action('woocommerce_order_status_completed', array($this, 
  'payment_complete' 
), 1);

然后这个函数:

public function payment_complete($order_id) { 
  $this->generate_order_file($order_id); 
}

这个函数是用来生成一个订单文件的,但它根本没有被调用。我之前尝试让它在错误日志中添加一条消息,

我正在使用 WooCommerce 订单状态控制插件,订单会在付款后自动更改为完成。然而由于某种原因 woocommerce_order_status_completed 操作没有触发。

【问题讨论】:

    标签: php wordpress woocommerce


    【解决方案1】:

    最好的方法是使用这个动作:

    add_action( 'woocommerce_order_status_completed', 'your_function', 10, 1);
    function your_function($order_id) {
    }
    

    【讨论】:

    • 为什么这是最好的方法?
    • @upss1988 因为它减少了函数调用。您只需在“已完成”状态下运行此功能。关于另一个答案,不需要在所有状态更改上运行该函数并过滤掉我们不需要的。
    【解决方案2】:

    功能

    function payment_complete( $order_id, $old_status, $new_status ){
            if( $new_status == "completed" ) {
                $this->generate_order_file($order_id); 
            }
    }
    

    挂钩

    add_action( 'woocommerce_order_status_changed', array( $this, 'payment_complete'), 99, 3 );
    

    注意

    确保钩子被执行。是的,这会起作用。

    祝你好运。

    【讨论】:

    • 如果您将它用作 function.php 中的函数或通常在您不使用的任何地方,则只能使用 'payment_complete' 作为第二个参数,而不是 array( $this, 'payment_complete') WP中的类
    猜你喜欢
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 2020-02-27
    • 2017-05-24
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多