基于运输区域的 WooCommerce 电子邮件 [英] WooCommerce email based on shipping zone

查看:32
本文介绍了基于运输区域的 WooCommerce 电子邮件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当客户选择运输zone id = 0(世界其他地区)时,我需要发送电子邮件说明.

I need send email instructions when customer select shipping zone id = 0 (The rest of the world).

我在下面找到了代码,但它基于付款方式:

I found code below, but its based on payment method:

add_action( 'woocommerce_email_before_order_table', 'add_order_email_instructions', 10, 2 );

function add_order_email_instructions( $order, $sent_to_admin ) {

  if ( ! $sent_to_admin ) {

    if ( 'cod' == $order->payment_method ) {
      // cash on delivery method
      echo '<p><strong>Instructions:</strong> Full payment is due immediately upon delivery: <em>cash only, no exceptions</em>.</p>';
    } else {
      // other methods (ie credit card)
      echo '<p><strong>Instructions:</strong> Please look for "Madrigal Electromotive GmbH" on your next credit card statement.</p>';
    }
  }
}

请问如何将其更改为特定的送货区域?
如何根据 WooCommerce 中的送货区域设置特定的电子邮件说明?

How can I change it to specific shipping zone please?
How can I set specific email instructions based on shipping zone in WooCommerce?

对此的任何帮助将不胜感激.

Any help on this will be appreciated.

推荐答案

获取订单的送货区域并非易事.可以通过以下代码示例来完成:

Get the shipping zone for an order is not so easy. It can be done with the following code example:

add_action( 'woocommerce_email_before_order_table', 'custom_text_in_email_shipping_zone_based', 10, 4 );
function custom_text_in_email_shipping_zone_based( $order, $sent_to_admin, $plain_text, $email ) {
    if ( ! $sent_to_admin ) {

        // Get the shipping method related data (we need the Instance ID)
        $shipping_item        = $order->get_items('shipping');
        $item = reset($shipping_item);
        $shipping_method_id   = $item->get_method_id();
        $method_arr           = explode( ':', $shipping_method_id );

        // Get the Zone ID and related data
        $shipping_zone_object = WC_Shipping_Zones::get_zone_by( 'instance_id', $method_arr[1] );
        $zone_id              = $shipping_zone_object->get_id();        // Zone ID
        $zone_name            = $shipping_zone_object->get_zone_name(); // Zone name
        // Get the zone locations codes and types (if needed)
        foreach( $shipping_zone_object->get_zone_locations() as $zone_location ){
            $zone_location_code = $zone_location->code;
            $zone_location_type = $zone_location->type;
        }

        if ( '0' == $zone_id ) {
            // Rest of the world
            echo '<p><strong>Instructions:</strong> for Rest of the world.</p>';
        }
        elseif ( 'Mexico' == $zone_name ) {
            // Mexico zone name
            echo '<p><strong>Instructions:</strong> for Mexico.</p>';
        }
        else {
            // All other zones
            echo '<p><strong>Instructions:</strong> Other zones.</p>';
        }
    }
}

代码位于活动子主题(或活动主题)的 function.php 文件中.

经过测试并有效.

这篇关于基于运输区域的 WooCommerce 电子邮件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆