当订单中有缺货商品时,在 WooCommerce 电子邮件通知中显示消息

Posted

技术标签:

【中文标题】当订单中有缺货商品时,在 WooCommerce 电子邮件通知中显示消息【英文标题】:Display message in WooCommerce email notifications when order has backorder items in it 【发布时间】:2022-01-17 19:32:04 【问题描述】:

如果您订单中的几种产品中有一种产品缺货,我正在尝试在订单确认电子邮件中显示特定消息。

我正在努力获得正确的功能来扫描所有产品并让我的布尔值正常工作。

我当前的代码:

add_action( 'woocommerce_email_after_order_table', 'backordered_items_checkout_notice_email', 20, 4 );
function backordered_items_checkout_notice_email( $order, $sent_to_admin, $plain_text, $email ) 
  $found2 = false;
  foreach ( $order->get_items() as $item ) 
            if( $item['data']->is_on_backorder( $item['quantity'] ) ) 
            $found2 = true;
            break;
        
    

    if( $found2 ) 
        if ( $email->id == 'customer_processing_order' ) echo ' <strong>'.__('⌛ One or several products are Currently out of stock. <br/>Please allow 2-3 weeks for delivery.', 'plugin-mve').'</strong><br/>';
    
    


使用此代码,当您单击“订购”时,页面会冻结并且不会发送任何电子邮件。但我在后端得到订单。

谁能帮我修一下?

【问题讨论】:

【参考方案1】:

您的代码包含一个严重的未捕获错误,即:在 null 上调用成员函数 is_on_backorder()

以下代码将为customer_processing_order 电子邮件通知添加消息。另见:How to target other WooCommerce order emails

所以你得到:

function action_woocommerce_email_after_order_table( $order, $sent_to_admin, $plain_text, $email ) 
    // Initialize
    $flag = false;
    
    // Target certain email notification
    if ( $email->id == 'customer_processing_order' ) 
        // Iterating through each item in the order
        foreach ( $order->get_items() as $item ) 
            // Get a an instance of product object related to the order item
            $product = $item->get_product();

            // Check if the product is on backorder
            if ( $product->is_on_backorder() ) 
                $flag = true;
                
                // Stop the loop
                break;
            
        
        
        // True
        if ( $flag ) 
            echo '<p style="color: red; font-size: 30px;">' . __( 'My message', 'woocommerce' ) . '</p>';
        
    

add_action( 'woocommerce_email_after_order_table', 'action_woocommerce_email_after_order_table', 10, 4 );

【讨论】:

这太完美了!感谢您的帮助

以上是关于当订单中有缺货商品时,在 WooCommerce 电子邮件通知中显示消息的主要内容,如果未能解决你的问题,请参考以下文章

如何将缺货产品转移到垃圾 Woocommerce?

Prestashop 1.6 如何在 Multistor 中允许缺货订单

如果订单包含来自特定产品类别的商品,则为 WooCommerce 订单号添加前缀

在WooCommerce中产品缺货时更改单个添加到购物车文本

Woocommerce - 获取订单商品的价格和数量。

WooCommerce:确认订单后付款