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

如何将Give Donation WP插件数据填充至Google Tag Manager dataLayer?

嘿,我刚好折腾过Give WP + Stripe + GTM的集成需求,给你梳理下两种靠谱的实现方式,优先推荐第一种,稳定性拉满:

方法1:借助Give WP内置钩子(最推荐)

Give WP提供了专门的动作钩子,在捐赠记录成功写入数据库后触发,我们可以在子主题的functions.php或者自定义插件里加一段代码,直接把所需参数推送到dataLayer里。

// 捐赠记录插入数据库后触发钩子
add_action( 'give_insert_payment', 'push_give_donation_to_datalayer', 10, 2 );

function push_give_donation_to_datalayer( $payment_id, $payment_data ) {
    // 从Give WP获取捐赠相关数据
    $donor_obj = give_get_payment_donor( $payment_id );
    $donation_status = give_get_payment_status( $payment_id );
    $total_donation = give_get_payment_amount( $payment_id );
    $donation_date = give_get_payment_date( $payment_id, 'Y-m-d H:i:s' ); // 自定义时间格式
    $payment_method = give_get_payment_gateway( $payment_id );
    $payment_key = give_get_payment_key( $payment_id );
    
    // 只在捐赠成功时推送(Give WP里"publish"代表成功状态)
    if ( $donation_status !== 'publish' ) {
        return;
    }

    // 构建要推送的dataLayer数据结构
    $datalayer_payload = array(
        'event' => 'donationCompleted', // 自定义事件名,方便GTM识别触发
        'donor' => array(
            'id' => $donor_obj->id,
            'name' => $donor_obj->name,
            'email' => $donor_obj->email
        ),
        'date' => $donation_date,
        'total_donation' => $total_donation,
        'donation_status' => $donation_status,
        'donation_id' => $payment_id,
        'payment_key' => $payment_key,
        'payment_method' => $payment_method
    );

    // 输出推送脚本到页面
    ?>
    <script>
        window.dataLayer = window.dataLayer || [];
        dataLayer.push(<?php echo json_encode( $datalayer_payload ); ?>);
    </script>
    <?php
}

注意点:

  • 别直接改父主题的functions.php,用子主题或者自定义插件,避免主题更新后代码丢失。
  • 如果需要区分测试捐赠和真实捐赠,可以加个判断:if ( give_is_test_mode() ) { return; },跳过测试数据的推送。
方法2:GTM自定义JavaScript变量(无需修改代码)

如果你不想碰PHP代码,可以在GTM里创建自定义JS变量,从捐赠成功页面的DOM元素里抓取数据。但这种方式依赖页面结构,插件更新后可能失效,适合临时快速实现。

举个例子,假设你的捐赠成功页面有对应的DOM元素,变量代码可以这么写:

function() {
    // 先判断是否在捐赠成功页面,避免其他页面报错
    if ( !document.querySelector('.give-donation-receipt') ) {
        return null;
    }

    // 根据页面实际的DOM选择器抓取数据
    return {
        donor: {
            name: document.querySelector('.give-donation-receipt-donor-name').textContent.trim(),
            email: document.querySelector('.give-donation-receipt-donor-email').textContent.trim()
        },
        date: document.querySelector('.give-donation-receipt-date').textContent.trim(),
        total_donation: parseFloat(document.querySelector('.give-donation-receipt-total').textContent.replace(/[^0-9.]/g, '')),
        donation_status: 'completed', // 成功页面默认是完成状态
        donation_id: document.querySelector('.give-donation-receipt-id').textContent.trim().replace('#', ''),
        payment_method: document.querySelector('.give-donation-receipt-payment-method').textContent.trim(),
        payment_key: '' // 这个字段页面一般不显示,所以还是推荐方法1获取
    };
}
GTM后续配置步骤

不管用哪种方法,都需要在GTM里做这两步:

  1. 创建自定义事件触发器:触发条件设为event等于我们定义的donationCompleted(方法1里的事件名),或者如果用方法2,就用页面URL匹配捐赠成功页面。
  2. 创建标签并关联变量:比如GA4事件标签,事件名设为donation,然后把dataLayer里的参数对应到GA4事件参数里(比如total_value绑定{{DLV - total_donation}},donation_id绑定{{DLV - donation_id}}等)。

测试的时候记得打开GTM预览模式,提交一笔测试捐赠,查看dataLayer面板里是否有我们推送的参数,确保没问题再发布版本。

内容的提问来源于stack exchange,提问作者DoubleA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:00:08