以编程方式创建 "completed" 订单,而无需在 WooCommerce 中向客户发送电子邮件

Create programmatically a "completed" order without sending email to customer in 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' );

已测试并有效。

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

相关:

  • Create an order programmatically with line items in Woocommerce