簡體   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