我目前正在做一个项目,涉及到实现一个通知按钮,通过电子邮件提醒我们的司机时,订单准备皮卡。然而,我遇到了一个令人困惑的问题,让我挠头。
情况是这样的:每当点击通知按钮时,订单状态就会莫名其妙地变成“待付款”。这不是我们想要的行为,我正在努力找出这个问题的根本原因。
add_action( 'woocommerce_admin_order_data_after_order_details', 'send_driver_email_on_order_ready' );
function send_driver_email_on_order_ready( $order_id ) {
$order = wc_get_order( $order_id );
$id=$order->get_ID();
$status = $order->get_status();
$meta_data = $order->get_meta_data();
if($status=='processing' || 'driver-assigned' || 'out-for-delivery'){
foreach ( $meta_data as $meta ) {
if ( $meta->key === 'lddfw_driverid' ) {
$driver_id = $meta->value;
}
if ( $meta->key === 'Order_Ready' ) {
$order_ready_value = $meta->value;
if ( $order_ready_value === 'Yes' ) {
// Check if email has already been sent
$email_sent = $order->get_meta( 'email_sent', true );
if ( $email_sent != 'Yes' ) {
// Get driver information
$driver = get_userdata( $driver_id );
$driver_name = $driver->display_name;
$driver_email = $driver->user_email;
// Send email to driver
$subject = 'Order no.' . $id . ' ready for pickup';
$message = 'Hello ' . $driver_name . ',<br><br> Order no.' . $id . ' is now ready for pickup.';
$headers = array( 'Content-Type: text/html; charset=UTF-8' );
if ( wp_mail( $driver_email, $subject, $message, $headers ) ) {
// Update email_sent meta value
$order->update_meta_data( 'email_sent', 'Yes' );
$order->save();
}
}
}
}
}
}
}
add_filter('wp_mail_from', 'original_mail_address_email');
function original_mail_address_email(){
$email ='[email protected]';
return $email;
}
add_filter('wp_mail_from_name', 'email_name_order_ready');
function email_name_order_ready(){
return 'Oven Fresh';
}
除了这个挑战之外,我还想改进按钮的功能。理想情况下,我希望该按钮仅在订单状态为“已分配驱动程序”或“待交付”时显示。这将简化流程,并使我们的团队更有效率。
任何帮助,见解,或建议,您可以提供将不胜感激。你的帮助将是一种祝福。
1条答案
按热度按时间qlzsbp2j1#
有一些错误,不必要的并发症和遗漏的东西。
下面将显示一个按钮,用于向驾驶员发送特定订单状态的电子邮件通知:
当电子邮件被发送时,一条成功消息将取代按钮,并设置一个管理员注解。当电子邮件已发送时,将显示 “电子邮件已发送” 字符串,而不是按钮。
代码放在子主题的functions.php文件中(或插件中)。测试和作品。
发送的邮件截图: