WooCommerce:运行 某些代码仅在订单状态更改时出现一次

WooCommerce: Run some code only once on order status change

我想在特定订单状态更改时触发操作挂钩(或类似的东西)。从订单状态“处理中”到“已完成”的代码应该只 运行 一次。

这是 m 代码尝试:

   function payment_complete( $order_id, $old_status, $new_status ){
            if( $new_status == "completed" && $old_status == "processing") {
               // $this->generate_order_file($order_id); 
               echo '<script>alert("Working now, but not once:()")</script>'; 
            }
    }
    add_action( 'woocommerce_order_status_changed', 'payment_complete', 99, 3 );

但我的代码似乎 运行 多次。例如,我被困住了。任何帮助将不胜感激。

您可以使用以下方法将订单状态从“处理中”更改为“完成”,以便您的代码仅触发一次:

add_action( 'woocommerce_order_status_processing_to_completed', 'order_processing_to_completed', 100, 2 );
function order_processing_to_completed( $order_id, $order ) {
    // Avoid hook to be triggered multiple times at once
    if ( did_action( 'woocommerce_order_status_processing_to_completed' ) > 1 ) {
        return;
    }

    // Check that this action hook has not been triggered before
    if ( ! $order->get_meta( '_processing_to_completed' ) ) {
        // Grab the action in WordPress error logs (for testing)
        error_log('"processing_to_completed" Run once only.');
        
        // Add a custom meta data to flag the action as triggered
        $order->update_meta_data( '_processing_to_completed', 'yes' );
        $order->save(); // Save

        // Here add your code to be run once
    }
}

注意: 你不应该使用 payment_complete 函数名,因为它可能被另一个插件使用。

代码进入活动子主题(或活动主题)的 functions.php 文件。已测试并有效。

if语句中的代码只会被触发一次。