带有用户ID跟踪功能的WordPress gtag.js

时间:2019-02-05 作者:Piklet

StackExchange,我目前正在创建一个网站,并希望在其上实施谷歌分析。我正在使用新的gtag。js,还希望包括用户id跟踪。我有一点python经验,但几乎没有PHP经验。我已经查看了堆栈溢出和其他几个地方,并提出了这个特定于站点的插件-这是最有效的(甚至可以工作)方法吗?

<?php
/*
Plugin Name: Analytics Suite
Plugin URI: -redacted-
Description: Implements Google Analytics using the new gtag.js and combining user id.
Author: -redacted-
Version: 1.0
*/
if (is_user_logged_in()) {
 $user = wp_get_current_user();
 $userName = $user->user_login;
}
function ns_google_analytics() { ?>
 <!-- Global site tag (gtag.js) - Google Analytics -->
 <script async src="https://www.googletagmanager.com/gtag/js?id=XXXXXXXXX"></script>
      <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag(\'js\', new Date());
        gtag(\'config\', \'UA-XXXXXXXX\', {
            \'user_id\': \'1\'
        });
      </script>
 <?php if (isset($userName)) : ?>
      <script>
        window.dataLayer = window.dataLayer || [];
        function gtag(){dataLayer.push(arguments);}
        gtag(\'js\', new Date());
        gtag(\'config\', \'UA-XXXXXXX\', {
            \'user_id\': \'1\'
        });
      </script>  
 <?php else : ?>
    <script>
      window.dataLayer = window.dataLayer || [];
      function gtag(){dataLayer.push(arguments);}
      gtag(\'js\', new Date());
      gtag(\'config\', \'XXXXXXXXXXX\');
    </script> 
 <?php endif; ?>
 <?php
 }
add_action( \'wp_head\', \'ns_google_analytics\', 10 );
事先谢谢你,皮克莱特。

下面发帖的人是正确的,但我是作为客人发帖的,无法进入该帐户将其标记为解决方案。非常感谢:)

1 个回复
SO网友:phatskat

我认为你需要做几件事:

移动调用以让用户进入函数-如果不使用global, 这通常是一个坏主意,因为它会污染全局范围整合您的JS在输出数据之前使用转义方法。我认为这可能适合您:

<?php
/**
 * Plugin Name: Analytics Suite
 * Plugin URI: -redacted-
 * Description: Implements Google Analytics using the new gtag.js and combining user id.
 * Author: -redacted-
 * Version: 1.0
 */
function ns_google_analytics() {
    $user = wp_get_current_user();
?>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXXX"></script>
    <script>
    window.dataLayer = window.dataLayer || [];
    function gtag(){dataLayer.push(arguments);}
    gtag(\'js\', new Date());
<?php if ( 0 !== $user->ID ) : ?>
    gtag(\'config\', \'UA-XXXXXXX\', {
        \'user_id\': \'<?php echo esc_js( $user->user_login ); ?>\'
    });
<?php else : ?>
    gtag(\'config\', \'UA-XXXXXXX\');
<?php endif; ?>
    </script>
 <?php
 }
add_action( \'wp_head\', \'ns_google_analytics\', 10 );
在上述代码中:

我们让用户直接使用wp_get_current_user. 从WordPress codex (“Emphasis mine”):WP\\u用户对象,可以使用成员变量检索它。Attribute ID will show 0 if there is no user.

这意味着您将始终获得\\WP_User 返回,您可以检查ID 为零以确定用户是否登录if 语句实际上只需要在一个位置输出特定的JS,所以这些区域被合并,所有输出都应该转义,因此使用esc_js

相关推荐

Testing Plugins for Multisite

我最近发布了一个WordPress插件,它在单个站点上非常有效。我被告知该插件在多站点安装上不能正常工作,我理解其中的一些原因。我已经更新了代码,现在需要一种方法来测试更新后的代码,然后才能转到实时客户的多站点安装。我有一个用于测试的WordPress安装程序的单站点安装,但需要在多站点安装上进行测试。根据我所能找到的唯一方法是在网络上至少有两个站点来安装整个多站点安装,以测试我的插件。设置WordPress的整个多站点安装是插件开发人员的唯一/首选方式,还是有更快的测试环境可用。