仅用于订单处理的 WordPress Hook

发布于 2025-01-13 03:09:28 字数 589 浏览 0 评论 0原文

我正在制作一个 WordPress 插件,每次订单状态从“待处理”更新为“处理”时,我都需要进行 API 调用。

    function __construct(){
        add_action( 'woocommerce_after_order_object_save', [$this,'action_woocommerce_doba_order_import'], 10, 1 ); 
    }

    public function action_woocommerce_doba_order_import($order){
            
        if ( 'processing' === $order->get_status() ) {
           "API call here" 
        }
            
    }

当订单状态从“待处理”更新为“正在处理”时,此代码可以正常工作,但当状态从“正在处理”更改为其他状态时,它会进行两次额外的 API 调用。 因此,对于状态从处理状态更改为其他状态的每个订单,我都会收到两个额外的 API 调用。 我肯定犯了一些错误。也许我使用了错误的钩子或者需要设置不同的条件。

I am making a WordPress plugin, where I need to make an API call every time order status updates to "processing" from "pending".

    function __construct(){
        add_action( 'woocommerce_after_order_object_save', [$this,'action_woocommerce_doba_order_import'], 10, 1 ); 
    }

    public function action_woocommerce_doba_order_import($order){
            
        if ( 'processing' === $order->get_status() ) {
           "API call here" 
        }
            
    }

This code works fine when order status updates to "processing" from "pending" but it makes two additional API calls when status changes to something else from "processing".
So I get two additional API calls for each order it status changes from processing to something else.
I am definitely making some mistakes. Maybe I am using the wrong hook or need to put a different condition.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

零度° 2025-01-20 03:09:28

我们创建了一个 WordPress 代码来更改订单状态,每次订单状态从“待处理”更新为“处理中”时都会调用 Hooks 函数。

你试试这个:

  function __construct(){
            add_action( 'woocommerce_after_order_object_save', [$this,'action_woocommerce_doba_order_import'], 10, 1 ); 
        }
    
        public function action_woocommerce_doba_order_import($order_id){
                
        if( ! $order_id ) return;
    
        $order = wc_get_order( $order_id );
    
        if( $order->get_status() == 'pending' ) {
            $order->update_status( 'processing' );                
        }

}

We have created a WordPress code for changing the order status, Hooks function call every time order status updates to "processing" from "pending".

You try this:

  function __construct(){
            add_action( 'woocommerce_after_order_object_save', [$this,'action_woocommerce_doba_order_import'], 10, 1 ); 
        }
    
        public function action_woocommerce_doba_order_import($order_id){
                
        if( ! $order_id ) return;
    
        $order = wc_get_order( $order_id );
    
        if( $order->get_status() == 'pending' ) {
            $order->update_status( 'processing' );                
        }

}
拔了角的鹿 2025-01-20 03:09:28

我试图在最新版本的 WooCommerce 插件 [6.3.1] 中找到此操作,但找不到,但我发现可能有更好的挂钩可以使用,其中包括新状态。

do_action( 'woocommerce_order_edit_status', $this->get_id(), $result['to'] );

所以你可以这样使用它:

function __construct(){
            add_action( 'woocommerce_order_edit_status', [$this,'action_woocommerce_doba_order_import'], 10, 2 ); 
        }
    
        public function action_woocommerce_doba_order_import($order_id, $new_status){
                
        if( ! $order_id ) return;

        //ignore other status changes without additional calls
        if( 'pending' !== $new_status ) return;

        $order = wc_get_order( $order_id );

}

I tried to find this action in the newest version of the WooCommerce plugin [6.3.1] and I couldn't, but I found out that there's probably a better hook to use, which includes the new status.

do_action( 'woocommerce_order_edit_status', $this->get_id(), $result['to'] );

So you could use it like this:

function __construct(){
            add_action( 'woocommerce_order_edit_status', [$this,'action_woocommerce_doba_order_import'], 10, 2 ); 
        }
    
        public function action_woocommerce_doba_order_import($order_id, $new_status){
                
        if( ! $order_id ) return;

        //ignore other status changes without additional calls
        if( 'pending' !== $new_status ) return;

        $order = wc_get_order( $order_id );

}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文