gpt4 book ai didi

php - 在 WooCommerce 电子邮件通知中隐藏订单详细信息表中的自定义费用行

转载 作者:行者123 更新时间:2023-12-04 14:46:52 24 4
gpt4 key购买 nike

我在订单表中添加了 3 项自定义费用,但在发送给管理员/客户的电子邮件中,我想隐藏其中一项自定义费用。

查看屏幕截图:

enter image description here

实际上,我用这个片段添加了自定义费用:

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过滤器钩子(Hook),这将允许您将 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 );

注意:因为上面通过过滤器 Hook 的答案非常“棘手”,因为没有 CSS 类分配给 <tr>在电子邮件中标记,覆盖 /emails/email-order-details.php文件可能是一个“更安全”的选项。

  • 可以通过将其复制到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
}
}
}

关于php - 在 WooCommerce 电子邮件通知中隐藏订单详细信息表中的自定义费用行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69867087/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com