在WordPress中如何判断收件人是否打开了已发送的邮件?
WordPress邮件打开追踪状态不更新解决方案
核心问题原因
你当前的追踪像素URL不符合WordPress路由规则:admin.php的page参数仅支持后台预先注册的菜单别名,直接传入track.php无法触发对应的状态更新逻辑。
分步修复方案
1. 修正追踪像素请求路径(二选一即可)
方案A:使用WordPress标准AJAX接口(推荐)
- 首先在主题
functions.php或自定义插件中添加全局可访问的AJAX处理逻辑:
// 登录、未登录用户都可触发追踪回调 add_action('wp_ajax_nopriv_track_email_open', 'track_email_open_callback'); add_action('wp_ajax_track_email_open', 'track_email_open_callback'); function track_email_open_callback() { global $wpdb; $track_code = isset($_GET['track_code']) ? sanitize_text_field($_GET['track_code']) : ''; if ($track_code) { // 替换为你自己的邮件表名、状态字段名 $wpdb->update( $wpdb->prefix . 'your_email_table', ['status' => 'opened'], ['track_code' => $track_code] ); } // 返回1像素透明图片 header('Content-Type: image/gif'); echo base64_decode('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'); exit; }
- 修改邮件发送页的像素地址:
$track_code = md5(rand()); // 发送前先把track_code存入你的邮件表,对应本条邮件记录 $wpdb->insert($wpdb->prefix.'your_email_table', [ 'cust_name' => $cust_name, 'track_code' => $track_code, 'status' => 'sent', // 其他你需要存的字段 ]); $mail->Subject = 'You have a new quote'; // 替换为WP AJAX地址 $message .='<img src="https://oqdemo.com/quotesystem/wp-admin/admin-ajax.php?action=track_email_open&track_code='.$track_code.'" style="width:1px;height:1px;" alt="" />'; $message .='<h1>Hello,'.$cust_name.'</h1>';
方案B:直接调用独立track.php文件
- 将
track.php放在WordPress站点根目录,开头引入WP核心文件以支持数据库操作:
<?php require_once dirname(__FILE__) . '/wp-load.php'; global $wpdb; $track_code = isset($_GET['track_code']) ? sanitize_text_field($_GET['track_code']) : ''; if ($track_code) { $wpdb->update( $wpdb->prefix . 'your_email_table', ['status' => 'opened'], ['track_code' => $track_code] ); } header('Content-Type: image/gif'); echo base64_decode('R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'); exit; ?>
- 修改邮件发送页的像素地址:
$message .='<img src="https://oqdemo.com/quotesystem/track.php?track_code='.$track_code.'" style="width:1px;height:1px;" alt="" />';
2. 其他排查点
- 发邮件前必须把生成的
$track_code提前写入数据库对应邮件记录,否则更新逻辑找不到匹配条目 - 可在追踪处理逻辑中添加日志记录,确认请求是否正常触发、SQL执行是否报错
- 主流邮件客户端默认会拦截外部图片,可在邮件正文添加提示引导用户手动显示图片,提升追踪准确率
内容的提问来源于stack exchange,提问作者M Saqib
相关产品推荐
相关产品推荐

