【问题标题】: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更新订单时订单状态将保持不变