WooCommerce向商品发布者发送新订单邮件通知问题求助
问题分析与解决方案
你的代码逻辑本身没问题,但邮件未发送可能是钩子触发时机、邮件配置或变量获取环节出了问题,下面是针对性的修复和排查步骤:
一、修复后的代码(添加调试日志+优化邮件配置+更可靠的钩子)
add_action('woocommerce_new_order', 'send_email_to_product_publisher_on_new_order', 10, 1); function send_email_to_product_publisher_on_new_order($order_id) { if (!$order_id) { error_log('订单ID为空'); return; } // 获取订单对象 $order = wc_get_order($order_id); if (!$order) { error_log('无法获取订单对象,ID: ' . $order_id); return; } // 获取订单商品 $items = $order->get_items(); $item = reset($items); if (!$item) { error_log('订单中无商品,订单ID: ' . $order_id); return; } // 获取商品ID(如果是变体商品,确保获取父商品作者) $product_id = $item->get_product_id(); $variation_id = $item->get_variation_id(); if ($variation_id) { $product_id = wp_get_post_parent_id($variation_id); } // 获取商品作者 $author_id = get_post_field('post_author', $product_id); if (!$author_id) { error_log('商品无作者,商品ID: ' . $product_id); return; } $author = get_userdata($author_id); if (!$author) { error_log('无法获取用户数据,用户ID: ' . $author_id); return; } $author_email = $author->user_email; $author_name = $author->display_name; if (!$author_email) { error_log('用户无邮箱,用户ID: ' . $author_id); return; } // 邮件内容 $subject = 'Thông báo: Bạn vừa nhận được đơn hàng mới!'; $message = "Xin chào $author_name,\n\nBạn vừa nhận được một đơn hàng mới cho sản phẩm mà bạn đã đăng trên website của chúng tôi.\n"; $message .= "Thông tin đơn hàng:\n"; $message .= "Số đơn hàng: " . $order->get_order_number() . "\n"; $message .= "Tổng giá trị: " . wc_price($order->get_total()) . "\n"; $message .= "Bạn có thể xem chi tiết đơn hàng tại đây: " . $order->get_view_order_url() . "\n\n"; $message .= "Cảm ơn bạn đã đóng góp sản phẩm tuyệt vời của bạn cho cộng đồng của chúng tôi!"; // 完善邮件头(添加发件人,避免被当成垃圾邮件) $headers = array( 'Content-Type: text/plain; charset=UTF-8', 'From: ' . get_bloginfo('name') . ' <' . get_option('admin_email') . '>' ); // 发送邮件并记录结果 $mail_sent = wp_mail($author_email, $subject, $message, $headers); if ($mail_sent) { error_log('邮件发送成功,收件人: ' . $author_email . ',订单ID: ' . $order_id); } else { error_log('邮件发送失败,收件人: ' . $author_email . ',订单ID: ' . $order_id); } }
二、关键优化点
- 替换钩子为
woocommerce_new_order:这个钩子在订单成功创建后一定会触发,比woocommerce_checkout_order_processed更稳定,避免因结账流程中的异常导致钩子未执行。 - 添加调试日志:通过
error_log()记录每个环节的状态,方便你在wp-content/debug.log中查看哪一步出了问题。 - 处理变体商品:如果订单中的商品是变体,自动获取父商品的作者(因为变体的作者通常继承父商品)。
- 完善邮件头:添加合法的发件人信息,避免邮件被服务器或邮箱服务商判定为垃圾邮件。
三、排查步骤
启用WP_DEBUG日志:在
wp-config.php中添加以下代码,开启调试日志:define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false);完成测试后,查看
wp-content/debug.log文件,根据日志信息定位问题(比如是无法获取商品作者,还是邮件发送失败)。测试wp_mail功能:创建一个简单的测试脚本,确认服务器的邮件功能正常:
add_action('init', 'test_wp_mail'); function test_wp_mail() { $test_sent = wp_mail('你的测试邮箱', '测试邮件', '这是一封测试邮件'); if ($test_sent) { error_log('wp_mail测试成功'); } else { error_log('wp_mail测试失败,请检查服务器邮件配置'); } }访问网站后查看日志,如果测试邮件也发送失败,说明是服务器邮件配置问题,需要联系主机服务商解决。
验证商品作者信息:进入商品编辑页面,确认该商品的作者确实是
chu_xe用户,并且该用户的邮箱地址正确。检查垃圾邮件文件夹:提醒
chu_xe用户查看邮箱的垃圾邮件/广告文件夹,有时候邮件会被误判。
内容的提问来源于stack exchange,提问作者Tú Phạm
相关产品推荐
相关产品推荐

