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

如何在WooCommerce结账时捕获URL参数并在后台订单页展示?

在WooCommerce中捕获并展示GCLID、UTM_SOURCE等追踪参数的正确方法

你原代码的问题在于只搭了后台展示的架子,但没实现参数捕获和订单元数据存储这两个核心步骤,直接读取未定义变量或无效cookie自然无法正常运行。下面是完整的可实现方案:

1. 捕获URL参数并存入Cookie

用户访问带追踪参数的页面时,将参数存入Cookie(有效期设为30天,适配用户长周期购物路径):

// 捕获URL追踪参数并存入Cookie
add_action('init', 'save_tracking_params_to_cookie');
function save_tracking_params_to_cookie() {
    // 定义需要捕获的追踪参数列表
    $tracking_params = ['gclid', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
    
    foreach ($tracking_params as $param) {
        // 仅当URL存在该参数且Cookie未存储时写入
        if (isset($_GET[$param]) && !isset($_COOKIE[$param])) {
            setcookie(
                $param,
                sanitize_text_field($_GET[$param]),
                time() + 30*24*60*60, // 30天有效期
                COOKIEPATH,
                COOKIE_DOMAIN
            );
        }
    }
}

2. 结账时将Cookie参数保存为订单元数据

在订单创建时,把Cookie中的追踪参数存入订单自定义元数据,确保数据和订单绑定:

// 订单创建时保存追踪参数到订单元数据
add_action('woocommerce_checkout_create_order', 'save_tracking_params_to_order_meta');
function save_tracking_params_to_order_meta($order) {
    $tracking_params = ['gclid', 'utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content'];
    
    foreach ($tracking_params as $param) {
        if (isset($_COOKIE[$param])) {
            // 用下划线前缀避免元数据冲突
            $order->update_meta_data('_'.$param, sanitize_text_field($_COOKIE[$param]));
        }
    }
}

3. 后台订单详情页添加追踪信息 metabox

替换你原有的展示代码,现在读取订单元数据来展示追踪信息:

// 添加后台订单详情页的追踪信息 metabox
add_action('add_meta_boxes', 'add_tracking_meta_box_to_order');
function add_tracking_meta_box_to_order() {
    add_meta_box(
        'tracking_info_box',
        '追踪参数',
        'display_tracking_meta_box_content',
        'shop_order',
        'side', // 放在侧边栏更贴合后台布局
        'default'
    );
}

// 渲染metabox内容
function display_tracking_meta_box_content($post) {
    $order = wc_get_order($post->ID);
    // 映射参数键名和显示名称
    $tracking_params = [
        'gclid' => 'GCLID',
        'utm_source' => 'UTM 来源',
        'utm_medium' => 'UTM 媒介',
        'utm_campaign' => 'UTM 活动',
        'utm_term' => 'UTM 关键词',
        'utm_content' => 'UTM 内容'
    ];
    
    foreach ($tracking_params as $meta_key => $label) {
        $value = $order->get_meta('_'.$meta_key);
        if (!empty($value)) {
            echo '<p><strong>'.$label.':</strong>'.$value.'</p>';
        }
    }
    
    // 无参数时显示提示
    $has_params = array_filter(array_map(function($key) use ($order) {
        return $order->get_meta('_'.$key);
    }, array_keys($tracking_params)));
    
    if (empty($has_params)) {
        echo '<p>无追踪参数记录</p>';
    }
}

注意事项

  • 将所有代码添加到主题的functions.php文件,或封装为自定义插件使用
  • 测试时建议开启浏览器隐私模式,避免旧Cookie干扰结果
  • 确保URL中的参数名和代码中的一致(如GCLID对应的参数是小写gclid)

内容的提问来源于stack exchange,提问作者Thiago Marques Meneses

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:35:20