我有以下代码段:
add_action('woocommerce_new_order', 'foo_function', 10);
如果我是通过管理面板创建的新订单,则可以正常触发。
但是,通过REST API创建它不会触发该功能。
那是为什么?
注意:我已经尝试使用wp_insert_post或save_post_shop_order,但是它们会触发两次(即使使用DOING_AUTOSAVE检查时也是如此)。
答案 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