如何隐藏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; }
关键改动说明
- 保留原有查询逻辑:先判断
$args中是否已有meta_query,有则保留原有条件再追加新规则,避免破坏WooCommerce默认的订单查询逻辑。 - 匹配字段存储格式:用
'0.00'代替整数0,并将type设为DECIMAL,和WooCommerce存储_order_total的格式完全对齐,确保比较准确。 - 更严谨的比较规则:用
!=替代>,直接排除所有总额为0.00的订单,同时避免因数值精度(比如0.000)导致的漏判。
如果仍不生效,可以排查:
- 查看WordPress后台
wp_postmeta表,确认目标订单的_order_total元数据值是否为0.00 - 确保代码添加到主题
functions.php或自定义插件中,无语法错误
内容的提问来源于stack exchange,提问作者NasBEN
相关产品推荐
相关产品推荐

