当前位置: 首页 > 知识库问答 >
问题:

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

洪哲彦
2023-03-14

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

之后,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发送电子邮件

共有1个答案

苏鸿才
2023-03-14

请注意,函数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次“新订单”通知发送到管理员(第二个电子邮件将设置与正确的客户地址细节)。

相关:

  • 允许在WooCommerce 5+中重新发送新订单通知
  • 使用Woocommerce中的行项目以编程方式创建订单
 类似资料:
  • 我的Wordpress安装有问题,更具体的说是WooCommerce。 我在过去几个月中一直在工作的客户希望,每次客户完成/支付订单时,除了标准的订单确认电子邮件外,还会向他的电子邮件地址发送一封自定义电子邮件。 简而言之:我需要在订单完成时给客户发送一封自定义邮件。如何在functions.php中做到这一点? 我尝试使用官方文档中描述的各种钩子和函数,但无法弄明白。 Wordpress的版本是

  • 我在我的木业商店里遇到了一个很奇怪的问题。有几天“Customer_Processing_Order”电子邮件不再发送给客户。即使我在订单详细信息中触发手动发送此电子邮件,也没有发生任何事情。 在一般电子邮件中,发送与SMTP数据一起工作。当我将状态设置为“已完成”时,电子邮件将被发送。只有订单确认不起作用。 电子邮件被激活,我也检查了错误日志。我还安装了订单电子邮件的预览插件。当我想生成预览时,

  • 问题内容: 我最困难的时间是在WooCommerce中以编程方式创建订单。我正在使用下面的代码,是否正在创建订单,但是我无法获得客户信息或添加到订单的产品线项目。创建的新订单只是访客,没有任何物品,用户信息等。 问题似乎是,一旦创建了订单对象,尝试向订单中添加数据时就会失败。 这是我在日志中遇到的错误: 任何帮助,将不胜感激! 问题答案: 问题出在您的动作挂钩上。使用以下钩子: 确保给定的产品ID

  • 我正在尝试取消/删除在订单发货后将订单状态保存为“已完成”时发送的自动客户电子邮件。 不想发送自动电子邮件的原因是,我在电子邮件模板文件(override)/woocommerce/email/customer-completed-order.php中添加了一个代码,它将在发送给客户的电子邮件中显示在admin中创建的新订单注释,如果我们添加订单注释并保存它,然后将订单状态更改为completed

  • 我有最困难的时间在WooCommerce中以编程方式创建订单。我使用下面的代码,是创建订单,但我无法获得客户信息或产品线项目添加到订单。创建的新订单只是作为来宾,没有项目、用户信息等。 问题似乎是,一旦订单对象被创建,当尝试向订单添加数据时,它将失败。 以下是我在日志中遇到的错误: 在此方面的任何帮助都将不胜感激!

  • 拜托,帮忙解决问题。我想让WooComerce只发送一次电子邮件,关于新的订单-管理和客户。如果我将更改订单状态-没有电子邮件将被发送。 我尝试在处禁用通知,并禁用客户端的所有通知,但在这种情况下,客户端即使是第一次也不会收到任何电子邮件。