在 WooCommerce 中以编程方式创建“已完成”订单,而无需向客户发送电子邮件

问题描述

我将此代码用于新订单并设置完成状态。

之后,woocommerce 会自动向买家发送电子邮件

但我不想发送这封电子邮件

我该怎么做?

$order = wc_create_order();
$order->set_customer_id($userId);

foreach($_POST['basket'] as $prod){
    $order->add_product(get_product($prod['id']),$prod['count']);
}

$order->set_address($address,'billing');
$order->calculate_totals();
$order->update_status("completed",'TEST',TRUE);

注意:我不想禁用从 wp-admin 发送电子邮件

解决方法

请注意,函数 get_product() 已过时并替换为 wc_get_product()

为避免通知客户,您可以先将用户ID设置为0,然后将订单状态更新为“完成”后,您可以设置用户地址和真实用户ID如下:

$order = wc_create_order();
$order->set_customer_id(0);

foreach($_POST['basket'] as $prod){
    $order->add_product( wc_get_product($prod['id']),$prod['count']);
}

$order->calculate_totals();
$order->update_status("completed",'TEST',TRUE);

$order->set_address($address,'billing'); // set address
$order->set_customer_id($userId); // Set user ID
$order_id = $order->save(); // Save to database (get order ID)

// Allow resending new order email
add_filter('woocommerce_new_order_email_allows_resend','__return_true' );

// Resend new order email
WC()->mailer()->get_emails()['WC_Email_New_Order']->trigger( $order_id );

// Disable resending new order email
add_filter('woocommerce_new_order_email_allows_resend','__return_false' );

经过测试并有效。

唯一的事情是您将收到 2 次发送给管理员的“新订单”通知(第二封电子邮件将设置正确的客户地址详细信息)

相关: