繁体   English   中英

以编程方式创建“已完成”订单,无需将 email 发送给 WooCommerce 中的客户

[英]Create programmatically a “completed” order without sending email to customer in WooCommerce

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

之后,woocommerce 自动发送 email 给买家。

但我不想发送这个 email。

我怎么能?

$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 发送 email

请注意,function 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 次“新订单”通知发送给管理员(第二个 email 将设置正确的客户地址详细信息)

有关的:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM