[英]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.