簡體   English   中英

在 Woocommerce 中添加自定義訂單狀態並發送有關狀態更改的電子郵件

[英]Add custom order status and send email on status change in Woocommerce

我想在我的 woocommerce 網站中添加自定義訂單狀態。每當狀態更改為該自定義狀態時,我都想發送郵件。
我嘗試在 WooCommerce 中自定義訂單狀態更改時發送電子郵件通知
以及https://github.com/sarun007/custom-email-plugin/tree/master
但沒有奏效
我正在使用 woocommerce 3.2.6版本

新版本代碼在 WooCommerce 4+ 中添加發送電子郵件通知的新訂單狀態


要使其適用於新的自定義訂單狀態(此處為“等待交貨”),您應該需要:

  • 首先注冊自定義新訂單狀態,
  • 在管理訂單列表(可選)的批量編輯下拉菜單中顯示它,
  • 按順序顯示它編輯頁面狀態下拉列表
  • 當訂單獲得此自定義狀態時發送自定義電子郵件通知。

代碼:

// register a custom post status 'awaiting-delivery' for Orders
add_action( 'init', 'register_custom_post_status', 20 );
function register_custom_post_status() {
    register_post_status( 'wc-awaiting-delivery', array(
        'label'                     => _x( 'Awaiting delivery', 'Order status', 'woocommerce' ),
        'public'                    => true,
        'exclude_from_search'       => false,
        'show_in_admin_all_list'    => true,
        'show_in_admin_status_list' => true,
        'label_count'               => _n_noop( 'Awaiting delivery <span class="count">(%s)</span>', 'Awaiting delivery <span class="count">(%s)</span>', 'woocommerce' )
    ) );
}

// Adding custom status 'awaiting-delivery' to order edit pages dropdown
add_filter( 'wc_order_statuses', 'custom_wc_order_statuses', 20, 1 );
function custom_wc_order_statuses( $order_statuses ) {
    $order_statuses['wc-awaiting-delivery'] = _x( 'Awaiting delivery', 'Order status', 'woocommerce' );
    return $order_statuses;
}

// Adding custom status 'awaiting-delivery' to admin order list bulk dropdown
add_filter( 'bulk_actions-edit-shop_order', 'custom_dropdown_bulk_actions_shop_order', 20, 1 );
function custom_dropdown_bulk_actions_shop_order( $actions ) {
    $actions['mark_awaiting-delivery'] = __( 'Mark Awaiting delivery', 'woocommerce' );
    return $actions;
}

// Adding action for 'awaiting-delivery'
add_filter( 'woocommerce_email_actions', 'custom_email_actions', 20, 1 );
function custom_email_actions( $action ) {
    $actions[] = 'woocommerce_order_status_wc-awaiting-delivery';
    return $actions;
}

add_action( 'woocommerce_order_status_wc-awaiting-delivery', array( WC(), 'send_transactional_email' ), 10, 1 );

// Sending an email notification when order get 'awaiting-delivery' status
add_action('woocommerce_order_status_awaiting-delivery', 'backorder_status_custom_notification', 20, 2);
function backorder_status_custom_notification( $order_id, $order ) {
    // HERE below your settings
    $heading   = __('Your Awaiting delivery order','woocommerce');
    $subject   = '[{site_title}] Awaiting delivery order ({order_number}) - {order_date}';

    // Getting all WC_emails objects
    $mailer = WC()->mailer()->get_emails();

    // Customizing Heading and subject In the WC_email processing Order object
    $mailer['WC_Email_Customer_Processing_Order']->heading = $heading;
    $mailer['WC_Email_Customer_Processing_Order']->subject = $subject;

    // Sending the customized email
    $mailer['WC_Email_Customer_Processing_Order']->trigger( $order_id );
}

代碼位於活動子主題(或活動主題)的 function.php 文件中。

測試和工作(應該適用於 2.5 以上的任何 Woocommerce 版本)

在其他函數中,如果您使用 WC_Order 方法update_status()將訂單更改為“等待交付”狀態,例如:

 $order->update_status();

相關的電子郵件通知也將發送

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM