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

Par*_*koo 5 php wordpress orders email-notifications 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);
Run Code Online (Sandbox Code Playgroud)

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

Loi*_*tec 5

请注意,该函数get_product()已过时并被替代wc_get_product()

为了避免通知客户,您可以0先将用户ID设置为,然后将订单状态更新为“完成”后,您可以设置用户地址和真实用户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' );
Run Code Online (Sandbox Code Playgroud)

经过测试并有效。

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

有关的: