我用Java编写了一个程序,完全填写了Woocommerce的订单。完成订单后,程序通过sql将订单状态更改为已完成。问题是客户 的 订单已完成电子邮件 不会以这种方式发送 。
如何使用php更改数据库中列出的订单multiply
?
我认为,一旦order_status将通过php更改,客户订单已完成的电子邮件通知将被发送。
通过我的java程序,我可以写入/读取数据库并打开网站。
答案 0 :(得分:1)
您的Java应用程序可以为订单创建一个自定义字段,而不是使订单完成,而meta_key
就像(例如) '_need_status_update'
一样具有任何价值(比如'1'
。)
现在,下面的钩子函数将检查(每当有人浏览网站时)以查看此特定自定义字段('meta_key' = '_need_status_update'
)。
如果找到自定义字段,它将:
钩住的功能:
add_action( 'init', 'check_orders_update_status' );
function check_orders_update_status(){
global $wpdb;
$meta_key = '_need_status_update';
// SQL query Get orders Ids that have a meta key like '_need_status_update'
$orders_ids = $wpdb->get_col( "
SELECT pm.post_id
FROM {$wpdb->prefix}postmeta as pm
WHERE pm.meta_key LIKE '$meta_key'
" );
if( count($orders_ids) > 0 ){
foreach( $orders_ids as $order_id) {
// Get an instance of the WC_Order object
$order = wc_get_order($order_id);
// Delete the meta data '_need_status_update'
delete_post_meta( $order_id, $meta_key );
// Updating Order status (will send "Customer order completed" email notification
$order->update_status('completed');
}
}
}
此代码位于您的活动子主题(或活动主题)的function.php文件中。
代码经过测试并有效。
更改Java App中的需求:
您只需要更改应用的行为,即为wp_postmeta添加给定的现有订单ID,自定义字段,如:
meta_key
赞'_need_status_update'
(可在方便时重新命名) meta_value
赞'1'
一旦完成,一切都将自动化。
最后,检查订单的函数中的SQL请求非常轻......
答案 1 :(得分:0)
我们如何做到这一点是通过创建一个替换原始WooCommerce订单状态和电子邮件行为的插件。
以下是:
如果您需要添加/删除默认订单状态,可以通过挂钩wc_order_statuses
挂钩,并通过业务流程返回一系列有效订单状态来执行此操作,然后执行{{1}在register_post_status()
挂钩。
电子邮件发送状态更改操作由电子邮件类定义。它们可以通过钩住init
钩子来改变。以下是我们所做的一小部分:
woocommerce_email_classes
以下是引用的电子邮件类的片段:
/*
* @hook woocommerce_email_classes
* @param WC_Email[] $emails
* @return WC_Email[]
*/
public static function initCustomEmails($emails) {
// Replace all emails with our own
global $wp_filter;
unset($wp_filter['woocommerce_order_status_completed_notification']);
$emails = [
'WC_Email_Customer_New_Account' => include('emails/classes/WC_Email_Customer_New_Account.php'),
'WC_Email_Customer_Order_Verify' => include('emails/classes/WC_Email_Customer_Order_Verify.php'),
...
];
return $emails;
}
触发器以及触发时的操作定义如上。 希望这会有所帮助。