无需插件在WordPress网站中保留UTM参数的实现方法
自动传递UTM参数到全站链接的WordPress代码方案
下面是可直接放入主题function.php文件的代码,解决UTM参数在站内跳转时丢失的问题:
代码实现
1. 存储UTM参数到Cookie
// 存储UTM参数到Cookie function save_utm_cookies() { if (isset($_GET['utm_source']) || isset($_GET['utm_medium']) || isset($_GET['utm_campaign']) || isset($_GET['utm_term']) || isset($_GET['utm_content'])) { $utm_params = array( 'utm_source' => sanitize_text_field($_GET['utm_source']), 'utm_medium' => sanitize_text_field($_GET['utm_medium']), 'utm_campaign' => sanitize_text_field($_GET['utm_campaign']), 'utm_term' => sanitize_text_field($_GET['utm_term']), 'utm_content' => sanitize_text_field($_GET['utm_content']) ); // 过滤空参数 $utm_params = array_filter($utm_params); if (!empty($utm_params)) { // Cookie有效期设为7天,可自行调整(单位:秒) setcookie('saved_utm_params', http_build_query($utm_params), time() + 7*24*60*60, COOKIEPATH, COOKIE_DOMAIN); } } } add_action('init', 'save_utm_cookies');
2. 给站内链接自动添加UTM参数
// 给站内链接追加UTM参数 function add_utm_to_links($content) { if (!isset($_COOKIE['saved_utm_params'])) { return $content; } $utm_params = $_COOKIE['saved_utm_params']; // 替换成你的网站域名(不带http/https) $domain = 'example.com'; // 匹配站内<a>标签的href属性 $pattern = '/<a(.*?)href="https?:\/\/'.$domain.'\/([^"]*)"(.*?)>/i'; $content = preg_replace_callback($pattern, function($matches) use ($utm_params) { $original_href = 'https://'.$domain.'/'.$matches[2]; // 处理已有参数的链接 if (strpos($original_href, '?') !== false) { $new_href = $original_href . '&' . $utm_params; } else { $new_href = $original_href . '?' . $utm_params; } // 替换原链接 return str_replace($original_href, $new_href, $matches[0]); }, $content); return $content; } // 对文章内容、导航菜单、小工具文本里的链接生效 add_filter('the_content', 'add_utm_to_links'); add_filter('wp_nav_menu_items', 'add_utm_to_links'); add_filter('widget_text', 'add_utm_to_links');
使用说明
- 把代码中的
$domain = 'example.com';替换为你实际的网站域名。 - Cookie有效期默认7天,可修改
time() + 7*24*60*60中的数值调整(比如改成30*24*60*60就是30天)。 - 代码会自动处理文章内容、导航菜单、小工具里的站内链接,确保UTM参数跟随跳转。
内容的提问来源于stack exchange,提问作者Naser Aslam
相关产品推荐
相关产品推荐

