从 WooCommerce "Order on-hold" 和 "New Order" 电子邮件中删除订单号

Remove Order # from WooCommerce "Order on-hold" & "New Order" Emails

我想从 WooCommerce 生成的 "Order on-hold" 和 "New order" 电子邮件中删除自动生成的订单号。

我正在使用第三方插件在下订单后分配自定义订单号,因此重要的是我分配的新订单号仍可在以后的电子邮件中使用。我不希望客户(或管理员)在更改之前看到原始订单号。

如有任何帮助,我们将不胜感激!

已更新 (仅适用于 woocommerce 3.3+ 特定模板)

您将需要通过您的子主题覆盖 Woocommerce 电子邮件模板,如以下链接的官方文档中所述:

Template structure & Overriding templates via a theme

要复制和覆盖的模板是 woocommerce/templates/emails/email-order-details.php

在此模板中(已按说明复制到您的主题中)您将需要更改整个块:

<h2>
    <?php
    if ( $sent_to_admin ) {
        $before = '<a class="link" href="' . esc_url( $order->get_edit_order_url() ) . '">';
        $after  = '</a>';
    } else {
        $before = '';
        $after  = '';
    }
    /* translators: %s: Order ID. */
    echo wp_kses_post( $before . sprintf( __( 'Order #%s', 'woocommerce' ) . $after . ' (<time datetime="%s">%s</time>)', $order->get_order_number(), $order->get_date_created()->format( 'c' ), wc_format_datetime( $order->get_date_created() ) ) );
    ?>
</h2>

至:

<?php
    // Targetting specific email notificatoins
    $email_ids = array('new_order', 'customer_on_hold_order');

    $date = sprintf( '<time datetime="%s">%s</time>', $order->get_date_created()->format( 'c' ), wc_format_datetime( $order->get_date_created() ) );

    // Displaying order number except for "New Order" and "Customer On Hold Order" notifications
    if( ! in_array($email->id, $email_ids) ){
        $order_number = sprintf( __( 'Order #%s', 'woocommerce' ), $order->get_order_number() );
        $date = '('.$date.')';
    } else {
        $date = __('Order date:', 'woocommerce') . ' ' . $date;
        $order_number = '';
    }

    if ( $sent_to_admin ) {
        $before = '<a class="link" href="' . esc_url( $order->get_edit_order_url() ) . '">';
        $after  = '</a> ';
    } else {
        $before = '';
        $after  = ' ';
    }
?>

<h2><?php echo $before . $order_number . $after . $date; ?></h2>

这将删除 "New Order" 和 "Customer On Hold Order" 电子邮件通知中的订单号。您将获得:

1) 新订单(管理员):

2) 客户搁置订单:

现在您还需要在 WooCommerce > 设置 > 电子邮件中从 "New Order" 主题中删除 ({order_number}) 并保存…

你完成了……

通过 CSS

删除订单号

如果您不想覆盖电子邮件模板,您可以使用 woocommerce_email_styles 挂钩添加一个简单的 CSS 规则来隐藏 WooCommerce 电子邮件中的订单号。

此挂钩在模板加载后立即激活:/woocommerce/emails/email-styles.php

To hide the order number only for the "Order on-hold" and "New Order" templates you can use the second $ email argument of the woocommerce_email_styles hook to check the id. Find a list here: .

// hides the order number in the email templates
add_filter( 'woocommerce_email_styles', 'add_woocommerce_email_styles', 10, 2 );
function add_woocommerce_email_styles( $css, $email ) {
    // define the ids of the emails for which you want to add CSS rules
    $email_ids = array(
        'new_order',
        'customer_on_hold_order'
    );
    // adds CSS rules to these emails only
    if ( in_array( $email->id, $email_ids ) ) {
        $css .= 'div[id^="body_content_inner"] > h2 { display: none; }';
    }
    return $css;
}

代码已经过测试并且可以工作。将它添加到您的活动主题 functions.php.

添加新订单号

的基础上,您还可以添加新的订单号,像这样:

// adds the new order number before the order table in the completed order email
add_action( 'woocommerce_email_before_order_table', 'add_content_before_order_table', 99, 4 );
function add_content_before_order_table( $order, $sent_to_admin, $plain_text, $email ) {
    // define the ids of the emails for which you want to add CSS rules
    $email_ids = array(
        'new_order',
        'customer_on_hold_order'
    );
    // adds CSS rules to these emails only
    if ( in_array( $email->id, $email_ids ) ) {
        echo '<p>New order number</p>'; // do not use the <h2> tag otherwise it will be hidden
    }
}

代码已经过测试并且可以工作。将它添加到您的活动主题 functions.php.