在 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_itemupdate_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_productwoocommerce_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致命错误连接问题

登录时 WooCommerce REST API 身份验证失败

无法在 wordpress 5.8.1 中访问 woocommerce rest api

需要帮助和信息有关Woocommerce创建订单API的提示