【问题标题】:WooCommerce woocommerce_new_order not firing when creating an order from the REST API从 REST API 创建订单时,WooCommerce woocommerce_new_order 未触发
【发布时间】:2019-12-02 10:18:50
【问题描述】:

我有以下代码sn-p:

add_action('woocommerce_new_order', 'foo_function', 10);

如果我从管理面板创建一个新订单,这会很好地触发。

但是,通过 REST API 创建它不会触发该函数。

为什么会这样?

更新

我尝试过使用以下方法:

woocommerce_rest_insert_shop_object - 这个根本不火。

wp_insert_postsave_post - 他们触发,但不包含行项目...(在第一次运行时,它是一个空列表,在第二次运行时( $update 标志为真)有一个项目,但该项目没有数据(如产品 ID 或数量)。

【问题讨论】:

  • 你试过用woocommerce_checkout_order_processed代替woocommerce_new_order吗?
  • 你是怎么通过rest api做的?

标签: wordpress woocommerce hook-woocommerce


【解决方案1】:
add_action( "woocommerce_rest_insert_shop_order_object", 'your_prefix_on_insert_rest_api', 10, 3 );
function your_prefix_on_insert_rest_api( $object, $request, $is_creating  ) {
    if ( ! $is_creating ) {
        return;
    }

    $order_id = $object->get_id();
    $wc_order = new WC_Order( $order_id );

    do_action( 'woocommerce_new_order', $order_id, $wc_order );
}

你试过woocommerce_rest_insert_shop_object, 但钩子是woocommerce_rest_insert_shop_order_object

【讨论】:

  • 哇,您的解决方案奏效了。我确定我也尝试了正确的方法,但它在某些时候不起作用......不知道我的错误是什么,但您的解决方案非常有效。谢谢!
【解决方案2】:

请使用此钩子woocommerce_process_shop_order_meta 而不是woocommerce_new_order 据我所知,只有在通过结帐处理订单时才会触发 woocommerce_new_order。在很多情况下,工作人员在 wp-admin 中创建订单并直接将它们分配给处理或完成,这意味着钩子没有按照我的想法做。使用 woocommerce_process_shop_order_meta 将为您解决。

【讨论】:

  • 不幸的是,这也不会触发。它将触发从管理仪表板创建的订单,但不会触发通过 REST API 创建的订单。
  • 你需要什么?
  • 我需要在新订单从任何目的地(包括 REST API)到达时立即触发该钩子。
  • 您也可以尝试挂接到 wp_insert_post 挂钩或 save_post_{$post->post_type} ,这应该是商店订单的 save_post_shop_order。
  • 感谢您的建议。对我来说 woocommerce_new_order 并没有在每个新订单上触发似乎很奇怪......
【解决方案3】:

在 v2 上有 woocommerce_rest_insert_{$this->post_type}_object 过滤器

所以你需要的正确钩子是woocommerce_rest_insert_shop_order_object

【讨论】:

    猜你喜欢
    • 2017-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    • 2013-04-20
    • 2021-05-02
    • 2017-03-21
    相关资源
    最近更新 更多