【问题标题】:Prevent WooCommerce order status being updated via API防止通过 API 更新 WooCommerce 订单状态
【发布时间】:2022-11-04 08:16:22
【问题描述】:

我已允许特定服务提供商(运输整合商)拥有对 WooCommerce 站点的 REST API 访问权限。这样我就可以将订单导入他们的系统。

不幸的是,一旦购买了运输标签,他们的系统就会将 WooCommerce 网站上的订单状态更改为“已完成”。这会触发客户过早收到订单完成电子邮件等。

我想知道是否有办法防止通过 API 更改订单状态?

正在使用的端点是/wp-json/wc/v3/orders/<id>

有没有一种方法可以测试 PUT 请求的来源(例如通过 IP 地址),然后防止状态被更新,或者有一种更通用的方法来简单地通过 REST API 防止状态更新?

【问题讨论】:

    标签: php wordpress woocommerce hook-woocommerce woocommerce-rest-api


    【解决方案1】:
    add_filter('woocommerce_rest_pre_insert_shop_order_object', 'restrict_order_status', 10, 3);
    
    function restrict_order_status($order, $request, $creating) {
    
    // $creating -- True If is creating a new object. False is update request
    
    if(!$creating){
        $existing_status = $order->get_status();
        $order->set_status($existing_status);
    }
    return $order;
    }
    

    钩子woocommerce_rest_pre_insert_{$this->post_type}_object 可用于在通过 WC Rest API 插入/更新帖子类型之前进行更改。 $this->post_type 可以是 'product'、'shop_order'、'shop_coupon'...等。

    在活动主题functions.php文件中添加上述代码sn-p,使用API​​更新订单时订单状态将保持不变

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-07-16
      • 2021-06-02
      • 1970-01-01
      • 2021-01-17
      • 2017-05-24
      • 1970-01-01
      • 1970-01-01
      • 2016-10-17
      相关资源
      最近更新 更多