如何从WooCommerce订阅邮件中移除「下次付款日期」?
移除WooCommerce邮件中的「下次付款日期」字段
通常「下次付款日期」字段来自WooCommerce Subscriptions插件的邮件模板,以下是几种可行的解决方法:
方法1:使用钩子函数(推荐,无需修改核心/插件文件)
通过过滤邮件订单元字段的钩子,直接移除目标字段。将以下代码添加到主题的functions.php文件或自定义功能插件中:
// 移除邮件中的下次付款日期字段 add_filter( 'woocommerce_email_order_meta_fields', 'remove_next_payment_date_from_emails', 10, 3 ); function remove_next_payment_date_from_emails( $fields, $sent_to_admin, $order ) { // 仅针对订阅订单处理 if ( function_exists( 'wcs_order_contains_subscription' ) && wcs_order_contains_subscription( $order ) ) { // 优先通过字段键名移除(键名可能为'_next_payment_date',可根据实际情况调整) unset( $fields['_next_payment_date'] ); // 如果键名匹配失败,通过字段标签文本匹配移除 foreach ( $fields as $key => $field ) { if ( strpos( $field['label'], '下次付款日期' ) !== false ) { unset( $fields[$key] ); break; } } } return $fields; }
如果不确定字段键名,可以在函数中临时添加var_dump($fields); exit;,触发邮件发送后就能看到所有字段的结构,再调整unset的目标键。
方法2:修改邮件模板文件(适合深度自定义场景)
通过复制插件模板到主题目录进行修改,避免插件更新覆盖自定义内容:
- 找到WooCommerce Subscriptions的邮件模板,路径为:
- HTML版:
wp-content/plugins/woocommerce-subscriptions/templates/emails/html/email-order-details.php - 纯文本版:
wp-content/plugins/woocommerce-subscriptions/templates/emails/plain/email-order-details.php
- HTML版:
- 将对应模板文件复制到你的主题目录下的
woocommerce/emails/html/(或plain/)文件夹中(路径结构需完全匹配,不存在的文件夹自行创建) - 打开复制后的文件,找到包含「下次付款日期」的代码块(示例如下),直接删除:
<?php if ( $next_payment_date = wcs_get_next_payment_date( $order ) ) : ?> <tr> <th class="td" scope="row" style="text-align:left;"><?php esc_html_e( '下次付款日期', 'woocommerce-subscriptions' ); ?>:</th> <td class="td" style="text-align:left;"><?php echo esc_html( date_i18n( wc_date_format(), $next_payment_date->getTimestamp() ) ); ?></td> </tr> <?php endif; ?>
方法3:仅在特定邮件类型中移除
如果需要只在指定邮件(如客户订单确认邮件)中移除该字段,可在钩子中增加邮件类型判断:
add_filter( 'woocommerce_email_order_meta_fields', 'remove_next_payment_date_from_specific_emails', 10, 4 ); function remove_next_payment_date_from_specific_emails( $fields, $sent_to_admin, $order, $email ) { // 指定要移除字段的邮件类型ID $target_email_ids = array( 'customer_processing_order', 'customer_completed_order' ); if ( in_array( $email->id, $target_email_ids ) && function_exists( 'wcs_order_contains_subscription' ) && wcs_order_contains_subscription( $order ) ) { // 移除字段逻辑同方法1 unset( $fields['_next_payment_date'] ); foreach ( $fields as $key => $field ) { if ( strpos( $field['label'], '下次付款日期' ) !== false ) { unset( $fields[$key] ); break; } } } return $fields; }
内容的提问来源于stack exchange,提问作者Crafty Team
相关产品推荐
相关产品推荐

