代码之家  ›  专栏  ›  技术社区  ›  RBaum

从WooCommerce“订单保留”和“新订单”电子邮件中删除订单

  •  2
  • RBaum  · 技术社区  · 6 年前

    我想从WooCommerce生成的“订单暂停”和“新订单”电子邮件中删除自动生成的订单号。

    我正在使用第三方插件在下单后分配自定义订单号,因此我分配的新订单号仍然可以在未来的电子邮件中使用,这一点很重要。我不想让客户(或管理员)看到原始订单号,直到它被更改。

    任何帮助都将不胜感激!

    2 回复  |  直到 6 年前
        1
  •  2
  •   LoicTheAztec    6 年前

    已更新 (仅适用于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>
    

    这将删除“新订单”和“客户保留订单”电子邮件通知上的订单号。您将获得:

    1) 新订单(管理员):

    enter image description here

    2) 客户待决订单:

    enter image description here

    现在,您还需要在WooCommerce>设置(>);要删除的电子邮件 ({order_number}) 从“新订单”主题并保存

    enter image description here

    你完成了

        2
  •  0
  •   Vincenzo Di Gaetano    3 年前

    通过CSS删除订单号

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

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

    仅隐藏“保留订单”和“新订单”的订单号 模板可以使用的第二个$email参数 woocommerce\u email\u styles挂钩以检查id。请在此处查找列表: Targeting specific email with the email id in Woocommerce

    // 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;
    }
    

    该代码已经过测试并正常工作。将其添加到活动主题的功能中。php。

    添加新订单号

    基于 this answer 您还可以 添加新订单号 ,例如:

    // 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
        }
    }
    

    该代码已经过测试并正常工作。将其添加到活动主题的功能中。php。