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

弗拉基米尔·雅提波夫(Vladimir Kyatipov)

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

这是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 );

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

LoicTheAztec

您可以使用以下命令将订单状态从“正在处理”更改为“完成”,仅对您的代码触发一次:

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语句中的代码将仅触发一次。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在触发多个更改时,仅运行一次昂贵的代码

来自分类Dev

重复订单仅更改一次

来自分类Dev

Keydown仅运行一次代码

来自分类Dev

使用调度程序仅运行一次代码

来自分类Dev

编辑此代码段以仅运行一次

来自分类Dev

反应useCallback不会在第一次更改时更新状态onChange

来自分类Dev

jQuery-单击更改时仅附加参数一次

来自分类Dev

限制用户角色仅更改 Woocommerce 中的某些订单状态

来自分类Dev

仅设置一次状态

来自分类Dev

您可以使useEffect仅在其中一个依赖项更改时运行一次,而在再次更改时不运行吗?

来自分类Dev

仅执行一次代码的函数

来自分类Dev

JavaScript代码仅执行一次

来自分类Dev

jQuery函数仅运行一次

来自分类Dev

点击事件仅运行一次

来自分类Dev

Foreach循环仅运行一次

来自分类Dev

仅运行一次javascript函数

来自分类Dev

在FOR循环中仅运行一次IF

来自分类Dev

ScheduledThreadPoolExecutor仅运行一次Swingworker

来自分类Dev

setInverval仅运行一次

来自分类Dev

Python函数仅运行一次

来自分类Dev

仅运行一次keyDown功能

来自分类Dev

EditText验证仅运行一次

来自分类Dev

SwiftUI .onAppear,仅运行一次

来自分类Dev

jQuery脚本仅运行一次

来自分类Dev

while循环仅运行一次?

来自分类Dev

jQuery函数仅运行一次

来自分类Dev

仅运行一次查询

来自分类Dev

Ajax函数仅运行一次

来自分类Dev

功能仅运行一次