在 WooCommerce Rest API 创建产品的那一刻修改产品
Posted
技术标签:
【中文标题】在 WooCommerce Rest API 创建产品的那一刻修改产品【英文标题】:Modify product the moment it's created by WooCommerce Rest API 【发布时间】:2021-06-22 20:29:15 【问题描述】:我有一个在 WooCommerce 中创建产品的 ERP 系统,我需要它们是私有的而不是公开的。
我尝试了钩子woocommerce_rest_insert_product
,但它什么也没做。我尝试使用plugins_loaded
操作将其添加到插件和 mu-plugin 上。
我在 WC_REST_Products_V1_Controller
类中找到了钩子,理论上它应该可以工作...
/**
* Fires after a single item is created or updated via the REST API.
*
* @param WP_Post $post Post data.
* @param WP_REST_Request $request Request object.
* @param boolean $creating True when creating item, false when updating.
*/
do_action( 'woocommerce_rest_insert_product', $post, $request, false );
【问题讨论】:
【参考方案1】:我知道这是一个迟到的答案,但其他人来这里阅读它可能是有意义的。
我很确定您使用的是 API 的最新 v3
。
问题是您提到的操作可以在WC_REST_Products_V1_Controller
中找到,其中端点命名空间设置为:
protected $namespace = 'wc/v1';
这意味着它在 v3 上不可用。
如果您通过版本 3 中的 Woocommerce REST 控制器,您将访问此文件:
includes/rest-api/Controllers/Version3/class-wc-rest-products-controller.php
命名空间设置为wc/v3
;
这里,WC_REST_Products_Controller
类扩展了WC_REST_Products_V2_Controller
。
在WC_REST_Products_V2_Controller
中有create_item
和update_item
方法。这两种方法看起来都与 v1 中的方法非常相似,但是您要查找的操作名称已更改为:
/**
* Fires after a single object is created or updated via the REST API.
*
* @param WC_Data $object Inserted object.
* @param WP_REST_Request $request Request object.
* @param boolean $creating True when creating object, false when updating.
*/
do_action( "woocommerce_rest_insert_$this->post_type_object", $object, $request, true );
因此,您的代码应如下所示:
add_action(
"woocommerce_rest_insert_product_object",
function($product, $request, $creating )
// do something here
, 10, 3
);
woocommerce_new_product
和 woocommerce_rest_insert_$this->post_type_object
之间的最大区别在于 woocommerce_new_product
会在所有创建操作上触发,而不仅仅是在 REST 创建上。
【讨论】:
这看起来很棒,将尽快实施并报告。谢谢!【参考方案2】:我找不到“为什么”它不起作用的答案。
我发现this WordPress.org forum post 显示了一个可行的替代方案:
add_action( 'woocommerce_new_product', function($id, $product )
// your thing
, 10, 2);
【讨论】:
我一直在寻找一个好的解决方案,但没有任何效果!但是woocommerce_new_product
做得非常好!感谢您与我们分享!以上是关于在 WooCommerce Rest API 创建产品的那一刻修改产品的主要内容,如果未能解决你的问题,请参考以下文章
错误 Woocommerce REST API 扩展订单“line_items”响应
需要帮助和信息有关 Woocommerce 创建订单 API 的提示
登录时 WooCommerce REST API 身份验证失败