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 );
事先谢谢你,皮克莱特。
下面发帖的人是正确的,但我是作为客人发帖的,无法进入该帐户将其标记为解决方案。非常感谢:)
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