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

仅针对未决订单状态和特定付款方式发送自定义的新订单通知

百里星纬
2023-03-14

我正在尝试发送关于新订单的通知只为“待定”的订单状态,而不是“货到付款”的付款方式。但当客户选择货到付款时,管理员收到了重复的邮件,因为Woocommerce将此订单状态从“待定”更新为“已处理”。

// New order notification only for "pending" order status and not "cash on delivery" payment method

add_action( 'woocommerce_checkout_order_processed', 'pending_new_order_notification', 10, 1 );
function pending_new_order_notification( $order_id ) {
    // Get an instance of the WC_Order object
    $order = wc_get_order( $order_id );
    $payment_title = $order->get_payment_method_title();

    // Only for "pending" order status and not Cash on delivery payment method 
    if( ! $order->has_status( 'pending' )  && ( $payment_title != 'cod' ) ) return;

    // Get an instance of the WC_Email_New_Order object
    $wc_email = WC()->mailer()->get_emails()['WC_Email_New_Order'];

    ## -- Customizing Heading, subject (and optionally add recipients)  -- ##
    // Change Subject
    $wc_email->settings['subject'] = __('{site_title} - Новый заказ ({order_number}) - {order_date} ожидает оплату');
    // Change Heading
    $wc_email->settings['heading'] = __('Новый заказ'); 
    $wc_email->settings['recipient'] .= ',name@email.com'; // Add email recipients (coma separated)

    // Send "New Email" notification (to admin)
     $wc_email->trigger( $order_id );
}

共有1个答案

田文景
2023-03-14

您的代码中有一些错误和遗漏的东西,所以请尝试以下操作:

// Send email
add_action( 'woocommerce_checkout_order_processed', 'pending_custom_new_order_notification', 20, 3 );
function pending_custom_new_order_notification( $order_id, $posted_data, $order ) {
    // Only for "pending" order status and not Cash on delivery payment method 
    if( $order->has_status( 'pending' ) && 'cod' !== $order->get_payment_method() ) {
        // Send "New Order" email
        $wc_email = WC()->mailer()->get_emails()['WC_Email_New_Order']->trigger( $order_id );
    }
}

// Custom email subject
add_filter( 'woocommerce_email_subject_new_order', 'custom_new_order_email_subject', 20, 2 );
function custom_new_order_email_subject( $formated_subject, $order ){
    // Only for "pending" order status and not Cash on delivery payment method 
    if( $order->has_status( 'pending' ) && 'cod' !== $order->get_payment_method() ) {
        $formated_subject = sprintf( __('%s - Новый заказ (%s) - %s ожидает оплату', 'woocommerce'), 
            get_bloginfo( 'name' ),
            $order->get_order_number(), // Order ID (or the order number)
            $order->get_date_modified()->date_i18n('F j, Y') // Formatted date modified
        );
    }
    return $formated_subject;
}

// Custom email heading
add_filter( 'woocommerce_email_heading_new_order', 'custom_new_order_email_heading', 20, 2 );
function custom_new_order_email_heading( $heading_txt, $order ){
    // Only for "pending" order status and not Cash on delivery payment method 
    if( $order->has_status( 'pending' ) && 'cod' !== $order->get_payment_method() ) {
        $heading_txt = __('Новый заказ', 'woocommerce');
    }
    return $heading_txt;
}

// Custom email recipient
add_filter( 'woocommerce_email_recipient_new_order', 'custom_new_order_email_recipient', 20, 2 );
function custom_new_order_email_recipient( $recipient, $order ){
    // Only for "pending" order status and not Cash on delivery payment method 
    if( $order->has_status( 'pending' ) && 'cod' !== $order->get_payment_method() ) {
        $recipient .= ',name@email.com';
    }
    return $recipient;
}

代码放在活动子主题(或活动主题)的functions.php文件中。经过测试并起作用。

 类似资料:
  • 用车类型码 计价类型(rule) 用车类型(require_level) 描述 301(快车) 600 普通快车 900 快车优享 201(专车) 203(专车接机) 204(专车送机) 100 舒适型 400 六座商务 200 行政级 501(豪华车) 503(豪华车接机) 504(豪华车送机) 1000 普通豪华车 订单状态返回码 状态码 描述 300 等待应答 311 订单超时 400 等待

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

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

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

  • 我已经在我的WooCommerce回拨订单()中创建了自定义订单状态: 现在我想收到一封电子邮件,每当收到一个订单,已经给出了状态栏。我根据这篇有用的文章创建了一个插件:如何添加自定义的WooCommerce电子邮件 这个链接包含我的插件源代码和functions.php代码。 我在function.php中添加了钩子: 当订单更改为“延迟订单”状态时,不会发生任何情况。 有什么想法吗? 我已经尝

  • 我使用WooCommerce通过电话/电子邮件等手动接受订单,我使用后端记录订单,手动添加订单。 目前,当生成“待付款”的订单作为状态时,库存会自动减少/扣减。我不希望这种情况发生。理想情况下,我只想减少库存,当订单被标记为“正在处理”,然后付款,然后采取。 我明白这是如何WooCommerce工作回来,有没有一种方法来避免库存减少,直到某一个状态已经被选中? 我已经在functions.php中