You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress中基于Google AdWords关键词URL设置Cookie的技术问询

解决WordPress中AdWords来源至表单提交的追踪方案

你的需求很明确:合作伙伴投放AdWords但拿不到广告系列URL,要在用户访问时识别AdWords参数设置Cookie,表单提交时带上这些数据做来源追踪。下面给你两种可行方案,还有各自的优劣势分析:

一、PHP方案(WordPress环境首选,稳定性更高)

1. 识别AdWords参数并设置Cookie

AdWords跳转通常会携带gclid、utm_source、utm_medium、utm_campaign、utm_term这些参数,我们可以在WordPress初始化时检测这些参数,仅当用户还没有来源Cookie时才设置(避免后续页面跳转覆盖原始来源)。

把这段代码加到你的主题functions.php文件里:

function set_adwords_source_cookie() {
    // 检查是否已存在AdWords来源Cookie,避免覆盖原始来源
    if (!isset($_COOKIE['adwords_source'])) {
        // 定义需要捕获的AdWords相关参数
        $target_params = ['gclid', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term'];
        $source_data = [];
        
        // 遍历参数,收集URL中存在的字段
        foreach ($target_params as $param) {
            if (isset($_GET[$param])) {
                $source_data[$param] = sanitize_text_field($_GET[$param]);
            }
        }
        
        // 如果捕获到AdWords参数,设置有效期30天的Cookie(可按需调整时长)
        if (!empty($source_data)) {
            $cookie_value = json_encode($source_data);
            setcookie(
                'adwords_source',
                $cookie_value,
                time() + 30 * 24 * 60 * 60, // 30天有效期
                COOKIEPATH,
                COOKIE_DOMAIN,
                is_ssl()
            );
        }
    }
}
// 在WordPress初始化阶段执行Cookie设置逻辑
add_action('init', 'set_adwords_source_cookie');

2. 表单提交时关联Cookie数据

如果用的是Contact Form 7这类主流表单插件,可以通过钩子把Cookie数据附加到提交内容里:

function attach_adwords_data_to_cf7_submission($posted_data, $contact_form) {
    // 读取已设置的AdWords来源Cookie
    if (isset($_COOKIE['adwords_source'])) {
        $source_data = json_decode(stripslashes($_COOKIE['adwords_source']), true);
        if (is_array($source_data)) {
            // 将来源数据添加到提交字段中
            $posted_data['adwords_source'] = print_r($source_data, true);
            // 如果你需要单独提取某个参数(比如utm_campaign),可以单独赋值
            // $posted_data['utm_campaign'] = $source_data['utm_campaign'] ?? '未识别';
        }
    }
    return $posted_data;
}
add_filter('wpcf7_posted_data', 'attach_adwords_data_to_cf7_submission', 10, 2);

之后在你的CF7表单里添加一个隐藏字段:

[hidden adwords_source]

这样表单提交后,后台邮件或者数据库里就能看到用户的AdWords来源信息了。

如果是自定义开发的表单,在处理提交的PHP代码里直接读取$_COOKIE['adwords_source']即可,比如:

if (isset($_COOKIE['adwords_source'])) {
    $adwords_data = json_decode(stripslashes($_COOKIE['adwords_source']), true);
    // 这里可以把$adwords_data存储到数据库,或者拼接到通知邮件里
}

二、JavaScript/jQuery方案(快速实现,适合临时测试)

如果你不想修改后端代码,也可以用前端JS来实现,但要注意:如果用户浏览器禁用JavaScript,这套逻辑就会失效。

1. 前端检测URL参数并设置Cookie

把这段代码放到主题的footer.php里(或者通过WordPress的wp_enqueue_script加载自定义JS文件):

jQuery(document).ready(function($) {
    // 检查是否已存在adwords_source Cookie
    if (!document.cookie.includes('adwords_source')) {
        const targetParams = ['gclid', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term'];
        const sourceData = {};
        const urlParams = new URLSearchParams(window.location.search);
        
        // 收集URL中的AdWords参数
        targetParams.forEach(param => {
            if (urlParams.has(param)) {
                sourceData[param] = urlParams.get(param);
            }
        });
        
        // 如果有有效数据,设置30天有效期的Cookie
        if (Object.keys(sourceData).length > 0) {
            const cookieValue = JSON.stringify(sourceData);
            const expiry = new Date();
            expiry.setTime(expiry.getTime() + 30 * 24 * 60 * 60 * 1000);
            document.cookie = `adwords_source=${encodeURIComponent(cookieValue)}; expires=${expiry.toUTCString()}; path=/`;
        }
    }
});

2. 表单提交时注入Cookie数据

如果是自定义表单,在提交前把Cookie数据添加到隐藏字段:

jQuery('#your-form-id').submit(function(e) {
    if (document.cookie.includes('adwords_source')) {
        // 提取Cookie值
        const cookieRow = document.cookie.split('; ').find(row => row.startsWith('adwords_source='));
        const cookieValue = cookieRow.split('=')[1];
        const sourceData = JSON.parse(decodeURIComponent(cookieValue));
        
        // 添加隐藏字段到表单
        $(this).append(`<input type="hidden" name="adwords_source" value="${encodeURIComponent(JSON.stringify(sourceData))}">`);
    }
});

如果是Contact Form 7,可以用它的专属JS钩子:

document.addEventListener('wpcf7submit', function(event) {
    if (document.cookie.includes('adwords_source')) {
        const cookieRow = document.cookie.split('; ').find(row => row.startsWith('adwords_source='));
        const cookieValue = cookieRow.split('=')[1];
        const sourceData = JSON.parse(decodeURIComponent(cookieValue));
        // 将来源数据追加到表单提交数据中
        event.detail.contactFormData.push({name: 'adwords_source', value: JSON.stringify(sourceData)});
    }
}, false);

三、方案选择建议

  • 优先选PHP方案:服务器端处理不受前端JS状态影响,数据准确性更高,完全适配WordPress的生态,适合企业级的追踪需求。
  • JS方案适合快速测试:不需要修改后端代码,上线快,但存在JS禁用导致追踪失效的风险,只能作为临时过渡方案。

内容的提问来源于stack exchange,提问作者S. Jensen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:51:12