如何在WooCommerce所有邮件通知中隐藏订单详情表指定自定义费用行
解决方案
你之前用CSS隐藏的方案失效是因为绝大多数邮件客户端对CSS选择器支持度极低,且不同邮件模板的行结构、序号不固定,无法通用。推荐直接用WooCommerce原生钩子在数据层面过滤要隐藏的费用行,兼容性100%,适用于所有邮件通知模板:
操作步骤
将以下代码添加到你的WordPress主题functions.php文件,或者自定义代码片段插件中即可:
add_filter( 'woocommerce_get_order_item_totals', 'hide_customfee2_in_all_emails', 10, 3 ); function hide_customfee2_in_all_emails( $total_rows, $order, $tax_display ) { // 仅在邮件通知场景下过滤,不影响后台、前端订单详情页显示 if ( did_action( 'woocommerce_email_header' ) ) { foreach ( $total_rows as $key => $row ) { // 匹配你要隐藏的customfee2对应的费用名称 if ( isset( $row['label'] ) && trim( $row['label'] ) === 'A retirer' ) { unset( $total_rows[$key] ); break; } } } return $total_rows; }
补充说明
- 如果需要同时在后台订单编辑页、前端用户订单详情页也隐藏该费用行,删掉代码中的
if ( did_action( 'woocommerce_email_header' ) )判断条件即可 - 若后续修改了
customfee2的费用名称,同步修改代码中判断的名称字符串即可;也可增加金额匹配规则,避免误删其他同名称费用:// 替换原有if判断条件即可,用金额+名称双重校验更精准 $target_amount = ( $order->get_cart_contents_total() + $order->get_shipping_total() ) * -1; if ( isset( $row['label'] ) && trim( $row['label'] ) === 'A retirer' && $row['value'] === wc_price( $target_amount ) ) - 之前添加的CSS隐藏代码可以直接删除,避免产生多余的样式冗余
内容的提问来源于stack exchange,提问作者Melinda Tsang
相关产品推荐
相关产品推荐

