You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 18:06:05