WooCommerce自定义订单动作在订单状态切换为trash时不触发如何解决
解决WooCommerce订单移入回收站不触发
woocommerce_order_status_changed钩子问题 问题根因
woocommerce_order_status_changed 钩子仅会在WooCommerce自定义的订单状态(如pending、processing、completed等)变更时触发,而trash是WordPress核心自带的文章状态,订单移入回收站走的是WordPress核心的文章删除流程,不会触发该WooCommerce专属钩子,因此原有代码无法命中trash状态的逻辑。
修复方案
你可以额外监听WordPress核心的trashed_post钩子来捕获订单移入回收站的动作,建议将公共逻辑抽离为独立函数,同时挂载到两个钩子保证状态变更逻辑的统一性,示例代码如下:
// 抽离公共的订单trash状态处理逻辑 function custom_handle_order_trash( $order_id ) { // 推荐用官方wc_get_order方法获取订单实例,容错性更高 $order = wc_get_order( $order_id ); if ( ! $order ) { return; } // 此处填写你原本需要在trash状态下执行的逻辑 } // 原有正常订单状态变更的监听逻辑保留 function custom_order_actions ( $order_id, $old_status, $new_status ){ if ($new_status == 'trash') { custom_handle_order_trash( $order_id ); } // 其余订单状态的原有逻辑可继续在此处编写 } add_action( 'woocommerce_order_status_changed', 'custom_order_actions', 99, 3 ); // 新增监听订单移入回收站的动作 function custom_listen_order_trash( $post_id ) { // 过滤仅处理WooCommerce订单类型的删除动作 if ( get_post_type( $post_id ) === 'shop_order' ) { custom_handle_order_trash( $post_id ); } } add_action( 'trashed_post', 'custom_listen_order_trash', 99 );
内容的提问来源于stack exchange,提问作者Vladimir Kyatipov
相关产品推荐
相关产品推荐

