当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce中自定义订单状态更改时发送电子邮件通知

章哲彦
2023-03-14

我已经在我的WooCommerce回拨订单(wc-backorder)中创建了自定义订单状态:

/**
     * Add custom status to order list
*/
    add_action( 'init', 'register_custom_post_status', 10 );
    function register_custom_post_status() {
        register_post_status( 'wc-backorder', array(
            'label'                     => _x( 'Back Order', '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( 'Back Order <span class="count">(%s)</span>', 'Back Order <span class="count">(%s)</span>', 'woocommerce' )
        ) );

}

/**
 * Add custom status to order page drop down
 */
add_filter( 'wc_order_statuses', 'custom_wc_order_statuses' );
function custom_wc_order_statuses( $order_statuses ) {
    $order_statuses['wc-backorder'] = _x( 'Back Order', 'Order status', 'woocommerce' );
    return $order_statuses;
}

现在我想收到一封电子邮件,每当收到一个订单,已经给出了状态栏。我根据这篇有用的文章创建了一个插件:如何添加自定义的WooCommerce电子邮件

这个链接包含我的插件源代码和functions.php代码。

我在function.php中添加了钩子:

add_action( 'woocommerce_order_status_wc-order-confirmed', array( WC(), 'send_transactional_email' ), 10, 10 );

function so_27112461_woocommerce_email_actions( $actions ){
    $actions[] = 'woocommerce_order_status_wc-order-confirmed';
    return $actions;
}
add_filter( 'woocommerce_email_actions', 'so_27112461_woocommerce_email_actions' );

当订单更改为“延迟订单”状态时,不会发生任何情况。

有什么想法吗?

我已经尝试了不同的钩子,但似乎无法使触发器函数运行。

我正在使用最新版本的WordPress和WooCommerce(3.0+)

谢谢

共有2个答案

朱啸
2023-03-14
add_action("woocommerce_order_status_changed", "my_custom_notification");

function my_custom_notification($order_id, $checkout=null) {
   global $woocommerce;
   $order = new WC_Order( $order_id );
   if($order->status === 'backorder' ) {
      // Create a mailer
      $mailer = $woocommerce->mailer();

      $message_body = __( 'Hello world!!!' );

      $message = $mailer->wrap_message(
        // Message head and message body.
        sprintf( __( 'Order %s received' ), $order->get_order_number() ), $message_body );

      // Cliente email, email subject and message.
     $mailer->send( $order->billing_email, sprintf( __( 'Order %s received' ), $order->get_order_number() ), $message );
     }

   }

试试这个

彭修筠
2023-03-14

-编辑/更新-

由于您正在使用的代码教程对于这个新的mega major Version3.0+来说确实已经过时了(2013年),所以挂接在woocommerce_order_status_changed操作钩子中的自定义函数将完成这项工作。因此,当订单状态更改为您的自定义状态时,您将能够发送自定义处理电子邮件通知。

下面是WC3.0+的工作和测试代码:

add_action('woocommerce_order_status_changed', 'backorder_status_custom_notification', 10, 4);
function backorder_status_custom_notification( $order_id, $from_status, $to_status, $order ) {

   if( $order->has_status( 'backorder' )) {

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

        // Customizing Heading and subject In the WC_email processing Order object
        $email_notifications['WC_Email_Customer_Processing_Order']->heading = __('Your processing Back order','woocommerce');
        $email_notifications['WC_Email_Customer_Processing_Order']->subject = 'Your {site_title} processing Back order receipt from {order_date}';

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

}

这段代码存在于活动子主题(或主题)的function.php文件中,也存在于任何插件文件中。

由于您的自定义状态为wc-backorder,而不是wc-order-confirmed,因此您只需将所有wc-order-confirmed替换为wc-order-confirmed

要使其正常工作,您必须以以下方式更改最后的2个挂钩函数

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


add_filter( 'woocommerce_email_actions', 'filter_woocommerce_email_actions' );
function filter_woocommerce_email_actions( $actions ){
    $actions[] = 'woocommerce_order_status_wc-backorder';
    return $actions;
}

代码存在于活动子主题(或主题)的function.php文件中,也存在于任何插件文件中。

这应该可以工作(我无法测试它,因为没有您的自定义插件的代码)。

参考源代码:woocommerce_order_status_{$this->status_transition[to]}操作挂钩

 类似资料:
  • 我添加了自定义状态: 我添加了自定义电子邮件: 我可以在电子邮件设置中看到电子邮件,在订单状态下拉菜单中看到状态。现在,每当订单状态更改为时,我就需要发送我的新电子邮件。过渡钩似乎从未开火。 我也试过: 这似乎也不起作用...有什么想法吗?

  • 我在我的WooCommerce安装中创建了一个自定义订单状态,称为Quote。 现在我想收到一封电子邮件,每当收到一个订单,已经给出了状态栏。我根据这篇有用的文章创建了一个插件:http://www.skyverge.com/blog/how-to-add-a-custom-woocommerce-email/ 我的插件基本上是从文章复制的,我只是更改了电子邮件的内容。我想改变的是什么触发了电子邮

  • 我创建了一个自定义电子邮件类并将其添加到Woocommerce中。当我转到WooCommerce中的电子邮件设置时,我可以在那里看到我的模板,当我手动触发它时,电子邮件就会到达目标电子邮件帐户。现在我遇到的问题是,我在我的类中添加了一个动作,该动作应该检测订单状态更改,并在订单被设置为我的自定义状态时执行我的触发器功能: add_action('woocommerce_order_status_w

  • 我正试图阻止woo-commerce发送邮件时,订单状态更改。这些订单是亚马逊的,我的插件从亚马逊同步到Woo-Commerce。在这样做的时候,亚马逊和woo-commerce的邮件都收到了,这激怒了客户。因此,我想停止电子邮件功能停止时,状态从我的插件更改。要更改状态的代码是 有没有可以设置的标志来避免发送邮件? 任何种类的帮助都是非常感谢的。

  • 我已成功更改了Woocommerce处理订单的电子邮件主题(使用此线程): 但我想发送处理订单电子邮件与新的主题后,订单状态改变,所以我遵循这一步调整主题等。 但只接受第一次电子邮件主题更改。有办法让它一起工作吗? 是否有权使用?

  • 我在这个相关的答案中找到了对我的问题的部分和可行的答案: send-an-email-notification-when-order-status-changhe-fron-pendig-to-cancelled 我正在考虑使用提供的解决方案,但想看看我是否可以更改电子邮件通知,明确地说,“未决付款订单现在取消”,所以它不同于常规取消的订单。 我该怎么做?