【问题标题】:Send email notification for COD orders with on-hold status in Woocommerce在 Woocommerce 中发送具有暂停状态的 COD 订单的电子邮件通知
【发布时间】:2018-10-24 10:54:32
【问题描述】:

我正在使用 wordpress 4.9.5 和 woocommerce 3.3.5,我希望触发以下付款方式、订单状态和客户邮件。

  • Paypal = 完成 + 付款确认电子邮件
  • BACS = 暂停 + 订单暂停电子邮件
  • COD = 暂停 + 订单暂停电子邮件

此时一切正常,除了在使用 COD 时没有收到“订单暂停电子邮件”。 订单状态为“暂停”,但暂停邮件未发送!

这是我正在使用的代码:

add_action( 'woocommerce_thankyou', 'wc_auto_complete_paid_order', 20, 1 );
function wc_auto_complete_paid_order( $order_id ) {
    if ( ! $order_id )
        return;

    // Get an instance of the WC_Product object
    $order = wc_get_order( $order_id );

    // On hold status for orders delivered with Bank wire, Cash on delivery and Cheque payment methods.
    if ( in_array( $order->get_payment_method(), array( 'bacs', 'cod', 'cheque', '' ) ) ) {
        $order->update_status( 'on-hold' );
    // Updated status to "completed" for paid Orders with all others payment methods
    } else {
        $order->update_status( 'completed' );
    }
}

function unhook_new_order_processing_emails( $email_class ) {
        // Turn off pending to processing for now
        remove_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_Processing_Order'], 'trigger' ) );
        // Turn it back on but send the on-hold email
        add_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_On_Hold_Order'], 'trigger' ) );
}

【问题讨论】:

    标签: php wordpress woocommerce orders email-notifications


    【解决方案1】:

    首先,您的第二个函数中缺少钩子……应该是:

    add_action( 'woocommerce_email', 'unhook_new_order_processing_emails' );
    function unhook_new_order_processing_emails( $email_class ) {
        // Turn off pending to processing for now
        remove_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_Processing_Order'], 'trigger' ) );
        // Turn it back on but send the on-hold email
        add_action( 'woocommerce_order_status_pending_to_processing_notification', array( $email_class->emails['WC_Email_Customer_On_Hold_Order'], 'trigger' ) );
    }
    

    官方文档:Unhook/remove WooCommerce Emails


    然后要触发“货到付款”订单的“暂停”通知,您可以尝试以下操作:

    // Trigger "On hold" notification for COD orders
    add_action('woocommerce_order_status_on-hold', 'email_on_hold_notification_for_cod', 2, 20 );
    function email_on_hold_notification_for_cod( $order_id, $order ) {
        if( $order->get_payment_method() == 'cod' )
            WC()->mailer()->get_emails()['WC_Email_Customer_On_Hold_Order']->trigger( $order_id );
    }
    

    代码进入您的活动子主题(或活动主题)的 function.php 文件中......

    【讨论】:

    • 这太完美了!
    猜你喜欢
    • 2017-06-14
    • 2018-09-19
    • 2021-01-24
    • 2021-02-12
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    • 2021-09-13
    • 2019-01-12
    相关资源
    最近更新 更多