在 WooCommerce 电子邮件通知中隐藏订单详细信息 table 中的自定义费用行
Hide custom fee row from order details table in WooCommerce email notifications
我在订单 table 中添加了 3 项自定义费用,但在发送至 admin/client 的电子邮件中,我想隐藏其中一项自定义费用。
查看屏幕截图:
实际上,我使用以下代码段添加了自定义费用:
add_action( 'woocommerce_cart_calculate_fees','customfee1' );
function customfee1() {
$soustotalavecliv = (WC()->cart->get_cart_contents_total()+WC()->cart->get_shipping_total());
WC()->cart->add_fee( 'TOTAL', $soustotalavecliv );
}
add_action( 'woocommerce_cart_calculate_fees','customfee2' );
function customfee2() {
$retraitsubt = (WC()->cart->get_cart_contents_total()+WC()->cart->get_shipping_total());
WC()->cart->add_fee( 'A retirer', $retraitsubt*-1 );
}
add_action( 'woocommerce_cart_calculate_fees','customfee3' );
function customfee3() {
$total_minus_100 = (WC()->cart->get_cart_contents_total()+WC()->cart->get_shipping_total()) /2;
WC()->cart->add_fee( 'Acompte versé par CB', $total_minus_100 * -1 );
}
但在所有模板电子邮件中,我想隐藏“customfee2”。我设法用 CSS 代码隐藏了它。但以下代码仅适用于发送给管理员的新订单电子邮件,而不适用于其他电子邮件。
function ymcode_hide_customfee2_row_with_css()
{
?>
<style>
tfoot tr:nth-child(5) {
display: none !important;
}
</style>
<?php
}
add_action('woocommerce_email_header', 'ymcode_hide_customfee2_row_with_css', 10, 0);
有什么建议吗?
首先,我修改了你现有的代码。这是因为:
- 没有必要多次添加相同的代码,因为一切都可能发生一次。
- 不需要使用
WC()->cart
,因为$cart
默认传递给回调函数。
所以只需使用:
function action_woocommerce_cart_calculate_fees( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Getters
$contents_total = $cart->get_cart_contents_total();
$shipping_total = $cart->get_shipping_total();
$total = $contents_total + $shipping_total;
// 1
// Add fee
$cart->add_fee( __( 'TOTAL', 'woocommerce' ), $total );
// 2
// Calculate
$retraitsubt = $total *-1;
// Add fee
$cart->add_fee( __( 'A retirer', 'woocommerce' ), $retraitsubt );
// 3
// Calculate
$total_minus_100 = ( $total / 2 ) * -1;
// Add fee
$cart->add_fee( __( 'Acompte versé par CB', 'woocommerce' ), $total_minus_100 );
}
add_action( 'woocommerce_cart_calculate_fees', 'action_woocommerce_cart_calculate_fees', 10, 1 );
回答你的问题:
您可以使用 woocommerce_email_styles
过滤器挂钩,这样您就可以将 CSS 添加到电子邮件中,而不必覆盖模板文件
所以你得到:
// Add CSS to email
function filter_woocommerce_email_styles( $css, $email ) {
$extra_css = 'tfoot tr:nth-child(5) { display: none !important; }';
return $css . $extra_css;
}
add_filter( 'woocommerce_email_styles', 'filter_woocommerce_email_styles', 10, 2 );
注意: 因为上面通过过滤器钩子的答案相当 'tricky' 因为没有 CSS class 分配给 <tr>
标签,覆盖 /emails/email-order-details.php 文件可能是一个 'safer' 选项。
- 可以通过将其复制到
yourtheme/woocommerce/emails/email-order-details.php.
来覆盖此模板
替换第 65 - 76 行 @version 3.7.0
if ( $item_totals ) {
$i = 0;
foreach ( $item_totals as $total ) {
$i++;
?>
<tr>
<th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['label'] ); ?></th>
<td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['value'] ); ?></td>
</tr>
<?php
}
}
有
if ( $item_totals ) {
$i = 0;
foreach ( $item_totals as $total ) {
$i++;
// Make sure this is correct!
$label = 'A retirer:';
// Check if the string is not equal to the label, and if not, display the table row
if ( $total['label'] != $label ) {
?>
<tr>
<th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['label'] ); ?></th>
<td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['value'] ); ?></td>
</tr>
<?php
}
}
}
我在订单 table 中添加了 3 项自定义费用,但在发送至 admin/client 的电子邮件中,我想隐藏其中一项自定义费用。
查看屏幕截图:
实际上,我使用以下代码段添加了自定义费用:
add_action( 'woocommerce_cart_calculate_fees','customfee1' );
function customfee1() {
$soustotalavecliv = (WC()->cart->get_cart_contents_total()+WC()->cart->get_shipping_total());
WC()->cart->add_fee( 'TOTAL', $soustotalavecliv );
}
add_action( 'woocommerce_cart_calculate_fees','customfee2' );
function customfee2() {
$retraitsubt = (WC()->cart->get_cart_contents_total()+WC()->cart->get_shipping_total());
WC()->cart->add_fee( 'A retirer', $retraitsubt*-1 );
}
add_action( 'woocommerce_cart_calculate_fees','customfee3' );
function customfee3() {
$total_minus_100 = (WC()->cart->get_cart_contents_total()+WC()->cart->get_shipping_total()) /2;
WC()->cart->add_fee( 'Acompte versé par CB', $total_minus_100 * -1 );
}
但在所有模板电子邮件中,我想隐藏“customfee2”。我设法用 CSS 代码隐藏了它。但以下代码仅适用于发送给管理员的新订单电子邮件,而不适用于其他电子邮件。
function ymcode_hide_customfee2_row_with_css()
{
?>
<style>
tfoot tr:nth-child(5) {
display: none !important;
}
</style>
<?php
}
add_action('woocommerce_email_header', 'ymcode_hide_customfee2_row_with_css', 10, 0);
有什么建议吗?
首先,我修改了你现有的代码。这是因为:
- 没有必要多次添加相同的代码,因为一切都可能发生一次。
- 不需要使用
WC()->cart
,因为$cart
默认传递给回调函数。
所以只需使用:
function action_woocommerce_cart_calculate_fees( $cart ) {
if ( is_admin() && ! defined( 'DOING_AJAX' ) )
return;
// Getters
$contents_total = $cart->get_cart_contents_total();
$shipping_total = $cart->get_shipping_total();
$total = $contents_total + $shipping_total;
// 1
// Add fee
$cart->add_fee( __( 'TOTAL', 'woocommerce' ), $total );
// 2
// Calculate
$retraitsubt = $total *-1;
// Add fee
$cart->add_fee( __( 'A retirer', 'woocommerce' ), $retraitsubt );
// 3
// Calculate
$total_minus_100 = ( $total / 2 ) * -1;
// Add fee
$cart->add_fee( __( 'Acompte versé par CB', 'woocommerce' ), $total_minus_100 );
}
add_action( 'woocommerce_cart_calculate_fees', 'action_woocommerce_cart_calculate_fees', 10, 1 );
回答你的问题:
您可以使用 woocommerce_email_styles
过滤器挂钩,这样您就可以将 CSS 添加到电子邮件中,而不必覆盖模板文件
所以你得到:
// Add CSS to email
function filter_woocommerce_email_styles( $css, $email ) {
$extra_css = 'tfoot tr:nth-child(5) { display: none !important; }';
return $css . $extra_css;
}
add_filter( 'woocommerce_email_styles', 'filter_woocommerce_email_styles', 10, 2 );
注意: 因为上面通过过滤器钩子的答案相当 'tricky' 因为没有 CSS class 分配给 <tr>
标签,覆盖 /emails/email-order-details.php 文件可能是一个 'safer' 选项。
- 可以通过将其复制到
yourtheme/woocommerce/emails/email-order-details.php.
来覆盖此模板
替换第 65 - 76 行 @version 3.7.0
if ( $item_totals ) {
$i = 0;
foreach ( $item_totals as $total ) {
$i++;
?>
<tr>
<th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['label'] ); ?></th>
<td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['value'] ); ?></td>
</tr>
<?php
}
}
有
if ( $item_totals ) {
$i = 0;
foreach ( $item_totals as $total ) {
$i++;
// Make sure this is correct!
$label = 'A retirer:';
// Check if the string is not equal to the label, and if not, display the table row
if ( $total['label'] != $label ) {
?>
<tr>
<th class="td" scope="row" colspan="2" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['label'] ); ?></th>
<td class="td" style="text-align:<?php echo esc_attr( $text_align ); ?>; <?php echo ( 1 === $i ) ? 'border-top-width: 4px;' : ''; ?>"><?php echo wp_kses_post( $total['value'] ); ?></td>
</tr>
<?php
}
}
}