在 Woocommerce 中发送特定运输方式的订单保留电子邮件

Posted

技术标签:

【中文标题】在 Woocommerce 中发送特定运输方式的订单保留电子邮件【英文标题】:Send Order On Hold Email for a specific shipping method in Woocommerce 【发布时间】:2018-12-03 01:48:50 【问题描述】:

我正在使用 Wordpress 4.9.6 和 WooCommerce 3.4.3 版,我需要发送“订单保留”电子邮件以获取特定的运输方式。

原因? 我使用 DHL 运输插件来计算运输,并且还可以使用“替代”运输方式。如果用户在结账时选择 DHL 运输,则计算运费并下单。但是,如果他们选择“替代”运输方式,我必须通知他们他们的订单已暂停,直到他们支付运费,因为“替代”方式已重命名为“免费送货”,我将为他们开具单独的发票订购后支付运费。

在寻找我的问题的解决方案时,我在这个答案线程中找到了一些符合我需求的代码:Customizing Woocommerce New Order email notification based on shipping method

但我无法弄清楚如何编辑此代码以使其适用于我的特定场景。

非常感谢您的帮助。

【问题讨论】:

请,当您使用 *** 中的某些代码时,您应该始终提及链接源,如果您没有对其进行任何更改,则不应将其包含在您的问题中。 @LoicTheAztec 当然,会记住这一点。谢谢 【参考方案1】:

要使其适用于重命名的免费送货方式,您需要稍微更改代码:

add_action ('woocommerce_email_order_details', 'custom_email_notification_for_shipping', 5, 4);
function custom_email_notification_for_shipping( $order, $sent_to_admin, $plain_text, $email )

    // Only for "On hold" email notification and "Free Shipping" Shipping Method
    if ( 'customer_on_hold_order' == $email->id && $order->has_shipping_method('free_shipping') )
        $order_id = $order->get_id(); // The Order ID

        // Your message output
        echo "<h2>Shipping notice</h2>
        <p>Your custom message goes here… your custom message goes here… your custom message goes here… your custom message goes here… your custom message goes here…</p>";
    

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试和工作。


强制“暂停”和“已完成”电子邮件通知(可选)

在订单状态更改时,以下代码将仅针对您重命名的“免费送货”送货方式和“已完成”电子邮件通知触发“暂停”电子邮件通知。

add_action( 'woocommerce_order_status_changed', 'sending_on_hold_email_notification', 20, 4 );
function sending_on_hold_email_notification( $order_id, $old_status, $new_status, $order )
    // Only  "On hold" order status and "Free Shipping" Shipping Method
    if ( $order->has_shipping_method('free_shipping') && $new_status == 'on-hold' )
        // Getting all WC_emails objects
        $notifications = WC()->mailer()->get_emails();
        // Send "On hold" email notification
        $notifications['WC_Email_Customer_On_Hold_Order']->trigger( $order_id );
     elseif ( ! $order->has_shipping_method('free_shipping') && $new_status == 'completed' )
        // Getting all WC_emails objects
        $notifications = WC()->mailer()->get_emails();
        // Send "On hold" email notification
        $notifications['WC_Email_Customer_Completed_Order']->trigger( $order_id );
    

代码进入您的活动子主题(或活动主题)的 function.php 文件中。经过测试和工作。

【讨论】:

感谢您的回答。我非常感谢。因此,您在答案中给出的第一个代码;如果客户选择了“替代”运输方式,它会自动发送“保留订单”电子邮件吗?而不是默认的 WooCommerce 订单电子邮件? 感谢您的评论。我非常感谢您的帮助。如果任何客户选择免费送货,我想自动触发“保留”电子邮件,但如果他们选择 DHL 送货,则发送正常完成的订单电子邮件。您能否编辑代码以按照我描述的方式运行?再次感谢。 感谢您的回答和帮助。我已接受您的答案为正确答案。

以上是关于在 Woocommerce 中发送特定运输方式的订单保留电子邮件的主要内容,如果未能解决你的问题,请参考以下文章

在 Woocommerce 中隐藏特定用户角色的特定运输方式

根据 Woocommerce 中选择的付款方式禁用运输方式

Woocommerce 通过 ajax 在结帐时更新运输方式

向 Woocommerce 运输方式添加不同的自定义标签

基于 Woocommerce 中的运输方式的不同电子邮件标题

WooCommerce 中特定运输类别、最低金额和地理定位国家/地区的购物车消息