【问题标题】:Displaying a custom notice on Emails based on item custom field highest value根据项目自定义字段最高值在电子邮件上显示自定义通知
【发布时间】:2017-01-20 12:43:52
【问题描述】:

在 WooCommerce 上,我有一个自定义字段 days_manufacture 用于每个具有不同(整数)值的产品。

我也有这段代码,它在购物车页面上显示一条消息,其中 “制造天数” 的值最高:

add_action('woocommerce_before_cart', 'days_of_manufacture');
function days_of_manufacture() {
    $day_txt = ' ' . __('day', 'your_theme_domain_slug' );
    $days_txt = ' ' . __('days', 'your_theme_domain_slug' );
    $text = __('Your Order will be produced in: ', 'your_theme_domain_slug' );
    $max_days = 0;

    foreach( WC()->cart->get_cart() as $cart_item )
        if($cart_item['days_manufacture'] > $max_days)
            $max_days = $cart_item['days_manufacture'];

    if($max_days != 0) {
        if ($max_days == 1)
            $days_txt = $day_txt;

        $output = $text . $max_days . $days_txt;
        echo "<div class='woocommerce-info'>$output</div>";
    }
}

现在我想在电子邮件中显示此消息。

我怎样才能做到这一点?

谢谢

【问题讨论】:

    标签: php wordpress woocommerce orders email-notifications


    【解决方案1】:

    你可以这样做,稍微改变this answer to your previous question的功能,我还把这个功能挂钩到woocommerce_email_before_order_table挂钩,用于订单通知电子邮件。

    因此,您将用这个替换现有的功能。您还替换了两个模板中的插入函数(见下文)

    此功能可以处理在模板(如前)和电子邮件通知中显示您的自定义动态消息。

    代码如下:

    add_action('woocommerce_email_before_order_table', 'days_of_manufacture_view_order_and_email', 99);
    function days_of_manufacture_view_order_and_email($order, $type='email') {
        $day_txt = ' ' . __('day', 'your_theme_domain_slug' );
        $days_txt = ' ' . __('days', 'your_theme_domain_slug' );
        $max_days = 0;
    
        // Your customized style for the email template (to adapt for your needs)
        $style = 'border:solid 2px #ededed; padding:10px; font-weight:bold;';
    
        // Your customized text goes in here
        $text = __('Your Order will be produced in: ', 'your_theme_domain_slug' );
    
        foreach( $order->get_items() as $item )
            if(get_post_meta($item['product_id'], 'days_manufacture', true) > $max_days )
                $max_days = get_post_meta($item['product_id'], 'days_manufacture', true);
    
        if($max_days != 0) {
            if ($max_days == 1)
                $days_txt = $day_txt;
    
            $output = $text . $max_days . $days_txt;
    
            // displayed on the email notifications
            if($type == 'email')
                echo "<div class='woocommerce-info' style='$style'>$output</div>"; // <== Customize the styles if needed
            // displayed on the woocommerce templates   
            else
                echo "<div class='woocommerce-info' style='display:block !important;'>$output</div>"; // displayed on the templates
        }
    }
    

    此代码位于您的活动子主题(或主题)的 function.php 文件中或任何插件文件中。

    模板发生变化

    现在在您的活动子主题(或主题)woocommerce templates folder 内的两个模板中:

    你将改变这一行:

    <?php days_of_manufacture_order_view($order); // <== inserted Here ?>
    

    通过这一行:

    <?php days_of_manufacture_view_and_email($order, 'template'); // <== inserted Here ?>
    

    现在自定义通知也会显示在电子邮件中,并且仍然可以在Thankyou查看订单页面和

    上使用

    My account &gt; Orders &gt; view order` 页面也是如此。


    参考资料:

    【讨论】:

      猜你喜欢
      • 2018-08-31
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 2021-02-01
      • 2023-03-18
      • 2019-01-13
      • 1970-01-01
      • 2020-12-07
      相关资源
      最近更新 更多