如何在WooCommerce后台订单及管理员邮件中展示结账页自定义复选框字段
WooCommerce自定义结账字段问题修复方案
你可以将以下代码追加到你的WordPress主题functions.php文件,或自定义功能插件中,即可解决两个问题:
修复复选框显示1/0为是/否状态
首先添加过滤器,适配后台订单编辑页、用户面板、邮件等所有场景的自定义字段值输出:
// 自定义复选框字段值格式化输出 add_filter('woocommerce_get_order_item_meta', 'format_custom_checkbox_field_value', 10, 3); add_filter('woocommerce_order_item_get_formatted_meta_data', 'format_custom_checkbox_meta', 10, 2); function format_custom_checkbox_field_value($value, $item_id, $key) { if ($key === 'billing_fattura') { return $value ? '是' : '否'; } return $value; } function format_custom_checkbox_meta($formatted_meta, $order_item) { foreach ($formatted_meta as $meta) { if ($meta->key === 'billing_fattura') { $meta->value = $meta->value ? '是' : '否'; } } return $formatted_meta; } // 修复后台订单编辑页复选框交互显示 add_filter('woocommerce_admin_billing_fields', 'customize_admin_fattura_field_output', 20); function customize_admin_fattura_field_output($fields) { $fields['fattura']['type'] = 'checkbox'; return $fields; }
修复自定义字段不显示在新订单管理员通知邮件问题
通过WooCommerce原生邮件钩子插入自定义字段内容,兼容默认邮件模板:
// 向管理员新订单邮件添加自定义字段 add_action('woocommerce_email_order_details', 'add_custom_fields_to_admin_email', 20, 4); function add_custom_fields_to_admin_email($order, $sent_to_admin, $plain_text, $email) { // 仅针对新订单管理员通知生效,不影响用户邮件 if ($email->id !== 'new_order' || !$sent_to_admin) return; $billing_fattura = $order->get_meta('billing_fattura', true) ? '是' : '否'; $billing_piva = $order->get_meta('billing_piva', true); $billing_cf = $order->get_meta('billing_cf', true); $billing_sdi = $order->get_meta('billing_sdi', true); // 输出字段区域适配邮件默认样式 echo '<h3>发票相关信息</h3> <table class="td" cellspacing="0" cellpadding="6" style="width: 100%; font-family: \'Helvetica Neue\', Helvetica, Roboto, Arial, sans-serif; margin-bottom: 20px;" border="1"> <tr> <th>需要发票?</th> <td>' . esc_html($billing_fattura) . '</td> </tr>'; if ($billing_piva) { echo '<tr> <th>Partita Iva</th> <td>' . esc_html($billing_piva) . '</td> </tr>'; } if ($billing_cf) { echo '<tr> <th>Codice Fiscale</th> <td>' . esc_html($billing_cf) . '</td> </tr>'; } if ($billing_sdi) { echo '<tr> <th>SDI</th> <td>' . esc_html($billing_sdi) . '</td> </tr>'; } echo '</table>'; }
验证方法
代码添加后可通过WordPress后台 WooCommerce > 设置 > 邮件 > 新订单 点击「发送测试邮件」验证字段显示效果,若你使用的主题自定义了邮件模板,确认模板中保留了woocommerce_email_order_details钩子即可正常生效。
内容的提问来源于stack exchange,提问作者Ginga37
相关产品推荐
相关产品推荐

