我需要检测何时成功创建新的WooCommerce订单并设置为“处理”-这是为了添加一些额外的功能等。这在前端很好,因为当通过WooCommerce woocommerce_thankyou
或woocommerce_order_status_processing
钩子创建订单时,很容易挂钩。
我的问题是,我也希望这工作时,通过网站的后端手动创建一个新的订单。我使用一些自定义字段时,通过手动添加一个订单,这是用来操纵订单时创建的。不幸的是,尽管woocommerce_order_status_processing
确实可以用于管理订单,但它似乎在订单 meta被保存之前就被触发了,因此当我试图检索任何元数据时,它都是空的。
为了解决这个问题,我尝试了WooCommerce hook for order creation from admin或这个GitHub线程上的建议,即使用WordPress钩子wp_insert_post
或save_post_shop_order
(save_post_{$post->post_type}
)。这可以解决我的订单 meta问题,因为它似乎在订单元保存后触发。
- 然而 * -它触发每次有一个更新或一个新的职位,所以我需要找到一种方法来检测它是否是一个新的职位或没有。在这些钩子上有一个
$update
参数,用于显示 '这是否是一个正在更新的现有帖子',但由于某种原因,它似乎总是被设置为true,即使它是一个新的帖子/订单。
总结一下:
- 我需要一个WordPress/WooCommerce钩子,是通过后端 * 和 * 只有运行此命令时,新创建的,而不是更新的一些方式创建后,订单/后 meta触发。
我能想到的唯一其他可能的方法是检查发布日期与修改日期,但我只是认为必须有一个更好的方法来做到这一点!
以下是我当前的代码,以防万一
function my_order_created ( $post_id, $post, $update ) {
// Don’t run if $post_id doesn’t exist OR post type is not order OR update is true
if ( ! $post_id || get_post_type( $post_id ) != 'shop_order' || $update == 1 ) {
return;
}
$order = wc_get_order( $post_id );
if ( $order && $order->has_status( 'processing' ) ){
// Do something
}
}
add_action( 'wp_insert_post', 'my_order_created', 10, 3 );
2条答案
按热度按时间prdp8dxp1#
你可以使用
woocommerce_new_order
钩子:h7wcgrx32#
由于WooCommerce 3已经实现了CRUD methods and data stores,因此有一些专用钩子,您可以专门用于创建订单。:
您可以使用
woocommerce_new_order
action hook来触发一些创建订单的自定义代码(位于WC_Order_Data_Store_CPT
create()
方法中)。还有一个
woocommerce_new_order_data
filter hook,允许您在创建订单时保存之前在函数wp_insert_post()
中过滤一些数据(位于Abstract_WC_Order_Data_Store_CPT
create()
方法中)这是一个更好的选择,因为它只是WooCommerce订单创建。