将基于送货方式的自定义文本添加到某些 WooCommerce 电子邮件通知

Posted

技术标签:

【中文标题】将基于送货方式的自定义文本添加到某些 WooCommerce 电子邮件通知【英文标题】:Add custom text based on shipping method to certain WooCommerce email notifications 【发布时间】:2022-01-06 05:08:12 【问题描述】:

我正在尝试让 WooCommerce 向客户发送不同的电子邮件,具体取决于他们是否选择了“收集”或任何交付方式。

如果客户选择取货,“处理中”电子邮件必须告诉他们一旦准备好就会收到通知,“已完成”电子邮件必须告诉他们前来取货。

如果客户选择送货,“处理中”电子邮件必须告诉他们在送达途中会收到通知,而“已完成”电子邮件必须告诉他们送达途中。

目前,我有以下代码,两封电子邮件都没有任何内容。

我不确定我的错误是什么,我也不确定我是否使用正确的变量名来引用我的运输方式。

add_action ('woocommerce_email_customer_details', 'custom_email_customer_details', 15, 4);
function custom_email_customer_details( $order, $sent_to_admin, $plain_text, $email )

  
    if ( $order->has_shipping_method('Pickup from PnP Honey Junction') && $new_status == 'processing' )

        echo "<h2>Shipping notice</h2>
        <p>You will be notified when to collect your order</p>";
        
    
        
        elseif($order->has_shipping_method('Pickup from PnP Honey Junction') && $new_status == 'completed')
            
        echo "<h2>Shipping notice</h2>
        <p>Your order is ready for pickup</p>";
            
        
    
elseif ( ! $order->has_shipping_method('Pickup from PnP Honey Junction') && $new_status == 'processing' ) 

        echo "<h2>Shipping notice</h2>
        <p>You will be notified when your order is out for delivery</p>";
    
        
    
    
    elseif(! $order->has_shipping_method('Pickup from PnP Honey Junction') && $new_status == 'completed' ) 
        
              echo "<h2>Shipping notice</h2>
        <p>Your order is out for delivery</p>";
        
        


【问题讨论】:

【参考方案1】:

$new_status 未定义,您使用的运输方式不正确。

要正确应用,最好先获取正确的方法ID,可以通过以下代码完成:

function action_woocommerce_email_customer_details( $order, $sent_to_admin, $plain_text, $email )  
    // Get the shipping method Id
    $shipping_items = $order->get_items('shipping');
    $shipping_item = reset( $shipping_items );
    
    echo 'DEBUG INFORMATION: ' . $shipping_item->get_method_id();

add_action( 'woocommerce_email_customer_details', 'action_woocommerce_email_customer_details', 10, 4 );

结果会是这样的:

调试信息:local_pickup

然后您将使用此代码替换上面的代码,以定位特定的电子邮件通知,您可以使用$email-&gt;id

另见:How to target other WooCommerce order emails

那么就是在这个答案中应用调试信息了:

function action_woocommerce_email_customer_details( $order, $sent_to_admin, $plain_text, $email ) 
    // For 'processing' & has shipping method 'REPLACE WITH THE DEBUG INFORMATION'
    if ( $email->id == 'customer_processing_order' && $order->has_shipping_method( 'local_pickup' ) ) 
        echo __( 'My processing text', 'woocommerce' );
    // For 'completed'
     elseif( $email->id == 'customer_completed_order' && $order->has_shipping_method( 'local_pickup' ) ) 
        echo __( 'My completed text', 'woocommerce' );      
    

add_action( 'woocommerce_email_customer_details', 'action_woocommerce_email_customer_details', 10, 4 );

【讨论】:

以上是关于将基于送货方式的自定义文本添加到某些 WooCommerce 电子邮件通知的主要内容,如果未能解决你的问题,请参考以下文章

使用自定义文本将项目添加到 Magento 购物车

根据 WooCommerce 中的自定义字段值将文本添加到订单摘要

将基于 ACF 字段的自定义“添加到购物车”按钮添加到 WooCommerce 单品页面

以编程方式将 UIButton 添加到带有情节提要的自定义 ViewController

基于产品类型的 WooCommerce 的“添加到购物车”按钮旁边的自定义按钮

基于产品类型的 WooCommerce 的“添加到购物车”按钮旁边的自定义按钮