从REST API创建订单时,WooCommerce woocommerce_new_order不触发

时间:2019-12-02 10:18:50

标签: wordpress woocommerce hook-woocommerce

我有以下代码段:

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

如果我是通过管理面板创建的新订单,则可以正常触发。

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

那是为什么?

注意:我已经尝试使用wp_insert_post或save_post_shop_order,但是它们会触发两次(即使使用DOING_AUTOSAVE检查时也是如此)。

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

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