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

如何隐藏WooCommerce我的账户中订单总额为0的订单?

问题分析与修复方案

你的代码失效主要有两个核心问题:

  • 直接覆盖原有meta_query:woocommerce_my_account_my_orders_query过滤器传递的$args里可能已经存在meta_query条件(比如默认的订单状态过滤),直接赋值$args['meta_query'] = array(...)会把原有条件完全覆盖,导致查询逻辑冲突,无法正确筛选订单。
  • 未匹配存储格式:WooCommerce中_order_total字段存储的是带小数的字符串(比如0.00),直接用整数0做数值比较会因为类型不匹配导致失效。

修正后的代码

add_filter( 'woocommerce_my_account_my_orders_query', 'hide_zero_total_orders_from_my_account', 10, 1 );
function hide_zero_total_orders_from_my_account( $args ) {
    // 合并原有meta_query,而非直接替换
    $args['meta_query'] = isset( $args['meta_query'] ) ? $args['meta_query'] : array();
    
    // 添加排除0总额订单的条件
    $args['meta_query'][] = array(
        'key'     => '_order_total',
        'value'   => '0.00',
        'compare' => '!=',
        'type'    => 'DECIMAL',
    );
    
    return $args;
}

关键改动说明

  1. 保留原有查询逻辑:先判断$args中是否已有meta_query,有则保留原有条件再追加新规则,避免破坏WooCommerce默认的订单查询逻辑。
  2. 匹配字段存储格式:用'0.00'代替整数0,并将type设为DECIMAL,和WooCommerce存储_order_total的格式完全对齐,确保比较准确。
  3. 更严谨的比较规则:用!=替代>,直接排除所有总额为0.00的订单,同时避免因数值精度(比如0.000)导致的漏判。

如果仍不生效,可以排查:

  • 查看WordPress后台wp_postmeta表,确认目标订单的_order_total元数据值是否为0.00
  • 确保代码添加到主题functions.php或自定义插件中,无语法错误

内容的提问来源于stack exchange,提问作者NasBEN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:06:00