尝试根据待处理的付款状态自动发送客户发票/订单明细

时间:2018-11-28 21:10:54

标签: php wordpress woocommerce automation hook-woocommerce

我有一个稍后付款的网关,我已将其设置为将订单置于保留状态。当我将其状态更改为待付款时,我想自动向这些订单发送带有“立即付款”链接的电子邮件。这将节省页面加载时间的分配,因为我当前必须查看订单,然后更改状态,然后触发“发送客户发票/订单明细”,然后使用此网关退回到每个订单的管理订单列表(我有“ WooCommerce订单状态管理器” ',这使我可以在批量编辑器中将订单状态更改为待处理,但是当我被RL中发生的事情分散注意力时,这会使我混淆了哪些订单已发送带有“付款链接”的发票,因此如果我收到了设置为在更改为待处理状态时自动发送“付款链接”电子邮件,这将节省当前95%的时间。我找到了这段代码,并试图按照自己的意愿进行修改:

// New order notification only for "Pending" Order status
add_action( 'woocommerce_checkout_order_processed', 'pending_new_order_notification', 20, 1 );
function pending_new_order_notification( $order_id ) {
// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );

// Only for "pending" order status
if( ! $order->has_status( 'pending' ) ) return;

// Get an instance of the WC_Email_New_Order object
$wc_email = WC()->mailer()->get_emails()['WC_Email_Customer-Invoice'];

## -- Customizing Heading, subject (and optionally add recipients)  -- ##
// Change Subject
$wc_email->settings['subject'] = __('{site_title} - New customer Pending order ({order_number}) - {order_date}');
// Change Heading
$wc_email->settings['heading'] = __('New customer Pending Order'); 
// $wc_email->settings['recipient'] .= ',name@email.com'; // Add email recipients (coma separated)

// Send "New Email" notification (to admin)
$wc_email->trigger( $order_id );
}

我将第11行更改为包含“ WC_Email_Customer_Invoice”,以尝试获取此代码以通过“立即付款”链接发送该电子邮件,原始代码指向“ WC_Email_New_Order”,我意识到最后几行似乎仅发送了该消息到管理电子邮件,但是我还没有收到任何管理电子邮件。我对php很陌生,但我也认为这仅针对“新客户待处理订单”,可能与状态更改为待处理无关。稍后支付网关以保留状态,因此woo会立即减少与订单相关的商品库存,并使用以下代码:

function reduce_stock_pending($order_id) {
 wc_reduce_stock_levels($order_id);
}
add_action('woocommerce_order_status_pending', 'reduce_stock_pending');

我可以将订单移至待处理状态,同时取消对待付款订单的自动补货。这不是完美的,因为您可以在订单中看到它迅速增加了库存,然后由于代码片段而立即将其收回,但是它对于我的应用程序是有用的。

虽然整个过程都在改变普通的woocommerce功能,每个人似乎都同意这种功能适用于普通的woo商店,但相同的逻辑对我经营商店的方式无济于事。通过此受限于本地支付网关的订单将用于在客户帐户结帐之前交付和安装的产品和服务。

斗争仍在继续,尽管所有声称这只是手动功能,但我仍决心找到一种使之自动化的方法。在实现该目标方面的任何帮助将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

我有个好消息...该代码正在运行,它将允许以后的发票传递网关将订单置于保留状态,其中woo将自动提取库存数量并将其远离不合格的客户,

然后,当您准备向客户开票时,就是在顶部的那几行与您将订单移至处理状态时,如何喜欢在等待验证付款的情况下将无形库存编号放回商店成功,但是客户无法将其添加到购物车。即使报告了它们,我们在产品/目录页面上也有库存。这可能对某些商人有用,但在我的情况下不行,现在只需将它们批量发送至待付款,它将自动发送带有“付款链接”的电子邮件,因此无需手动发送...这也不会减少第二次库存完成订单的整个过程。

// New order notification only for "Pending" Order status
add_action( 'woocommerce_checkout_order_processed', 'pending_new_order_notification', 
20, 1 );
function pending_new_order_notification( $order_id ) {

// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );

// Only for "pending" order status
if( ! $order->has_status( 'pending' ) ) return;

// Get an instance of the WC_Email_New_Order object
$wc_email = WC()->mailer()->get_emails()['WC_Email_Customer_Invoice'];

## -- Customizing Heading, subject (and optionally add recipients)  -- ##
// Change Subject
$wc_email->settings['subject'] = __('{site_title} - New customer Pending order 
({order_number}) - {order_date}');
// Change Heading
$wc_email->settings['heading'] = __('New customer Pending Order'); 
// $wc_email->settings['recipient'] .= ',name@email.com'; // Add email recipients 
(coma separated)

// Send "New Email" notification (to admin)
$wc_email->trigger( $order_id );
}

我不得不向这么多我什至不知道在哪里的人致以崇高的敬意,所以,非常感谢大家……最后,它在起作用(至少对我的申请而言)