【问题标题】:Add custom order status and send email on status change in Woocommerce在 Woocommerce 中添加自定义订单状态并发送有关状态更改的电子邮件
【发布时间】:2018-07-14 22:52:47
【问题描述】:

我想在我的 woocommerce 网站中添加自定义订单状态。每当状态更改为该自定义状态时,我都想发送邮件。
我试过 Send an email notification when custom order status changes in WooCommerce
以及 https://github.com/sarun007/custom-email-plugin/tree/master
但没有工作
我正在使用 woocommerce 3.2.6 版本

【问题讨论】:

    标签: php wordpress woocommerce status orders


    【解决方案1】:

    新版本代码Add a new order status that Send an email notification in 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();
    

    相关的电子邮件通知也会发送

    【讨论】:

    • 谢谢 Loic,我会试试这个
    • 我试过了,但它不起作用。它在下拉列表中添加状态,但它没有在电子邮件设置中设置
    • @ShrutiKharge 这里的答案只是回答你最初的问题。在后端添加新的电子邮件通知以获取自定义订单状态,这只是另一个与您在此处提出的问题无关的问题。
    • 这很好用,而且运行良好。但是,我想知道是否也可以更改电子邮件的正文?就像 sn-p 使用 $heading 和 $subject 一样,是否可以使用 $message_body 或类似的东西?
    • @TobiasM 我不这么认为......在这种情况下,您应该需要一些不同且更复杂的自定义电子邮件通知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多