如何通过Mailgun插件为WordPress事务性邮件添加差异化跟踪标签
解决WordPress中Mailgun事务性邮件自定义标签的问题
嘿,我明白你的困扰——后台设置的全局标签会套用到所有邮件,没法给不同类型的事务性邮件加专属标签对吧?其实你提到的og:tag应该是记混了,Mailgun识别的自定义标签是通过**邮件头X-Mailgun-Tag**或者API参数来设置的,下面给你两种实用的解决方法:
方法1:直接在邮件头中添加专属标签
如果你是用WordPress原生的wp_mail()函数发送邮件,只需要在你的$headers数组里添加X-Mailgun-Tag头就行,完全不影响全局标签(Mailgun会同时保留全局标签和自定义标签)。
修改你的代码示例如下:
$to = 'theiraddress@theirdomain.com'; $subject = 'Test'; $message = 'This is a test message'; $headers[] = 'From: My Website <noreply@mywebsite.com>'; // 这里添加你的自定义事务性邮件标签 $headers[] = 'X-Mailgun-Tag: test-transactional-email'; // 如果需要多个标签,可以再加一行 // $headers[] = 'X-Mailgun-Tag: user-onboarding'; wp_mail($to, $subject, $message, $headers);
方法2:用过滤器批量控制不同邮件类型的标签
如果你的插件要发送多种事务性邮件(比如注册确认、密码重置、订单通知等),用WordPress过滤器更灵活,能根据邮件的特征(主题、内容、收件人等)自动分配标签,还能替换全局标签(如果需要的话)。
把这段代码加到你的插件文件或者主题的functions.php里:
add_filter('mailgun_message_params', function($params, $message) { // 根据邮件主题判断类型,这里可以换成你自己的判断逻辑 if (strpos($message['subject'], 'Test') !== false) { // 设置单个或多个标签(数组形式) $params['tags'] = ['test-transactional-email']; } elseif (strpos($message['subject'], 'Order Confirmation') !== false) { $params['tags'] = ['order-confirmation', 'transactional']; } // 如果想完全替换全局标签,直接赋值即可;如果想保留全局标签并添加新标签,可以合并数组 // $params['tags'] = array_merge($params['tags'], ['new-tag']); return $params; }, 10, 2);
注意事项
- Mailgun允许单封邮件添加最多5个标签,标签名称不能超过128字符,只能包含字母、数字、下划线和连字符。
- 如果你用的是官方Mailgun WordPress插件,上面两种方法都能正常生效,不需要额外修改插件核心文件。
内容的提问来源于stack exchange,提问作者Badger
相关产品推荐
相关产品推荐

