Как правильно реализовать протокол измерений Google в WordPress с использованием PHP?

Я изо всех сил пытался реализовать протокол измерений Google на сайте WordPress.
Apache Server, используя PHP 5.4.35.

Я хочу загрузить данные о посетителях на стороне сервера в Google Analytics. На сайте есть огромные расхождения между журналами сервера и данными GA, и я надеюсь, что эти два (несколько) совпадут.

я взял код, опубликованный Стю Миллер на своем сайте, и сделал несколько небольших правок, надеясь отразить мой вариант использования. Я добавил следующее в мой файл wp-includes / functions.php:

require( ABSPATH . WPINC . '/http.php' );
require( ABSPATH . WPINC . '/class-http.php' );
require( ABSPATH . WPINC . '/general-template.php' );

// Handle the parsing of the _ga cookie or setting it to a unique identifier

// Generate UUID v4 function - needed to generate a CID when one isn't available

function gaGenUUID() {
return sprintf( '%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
// 32 bits for "time_low"mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ),
// 16 bits for "time_mid"mt_rand( 0, 0xffff ),
// 16 bits for "time_hi_and_version",
// four most significant bits holds version number 4
mt_rand( 0, 0x0fff ) | 0x4000,
// 16 bits, 8 bits for "clk_seq_hi_res",
// 8 bits for "clk_seq_low",
// two most significant bits holds zero and one for variant DCE1.1
mt_rand( 0, 0x3fff ) | 0x8000,
// 48 bits for "node"mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff ), mt_rand( 0, 0xffff )
);
}

function gaParseCookie() {
if (isset($_COOKIE['_ga'])) {
list($version,$domainDepth, $cid1, $cid2) = split('[\.]', $_COOKIE["_ga"],4);
$contents = array('version' => $version, 'domainDepth' => $domainDepth, 'cid' => $cid1.'.'.$cid2);
$cid = $contents['cid'];
}
else $cid = gaGenUUID();
return $cid;
}

function gaBuildHit( $method = null, $info = null ) {
if ( $method && $info) {
// Standard params
$v = 1;
$tid = "UA-xxxxxxx"; // Put your own Analytics ID in here
$cid = gaParseCookie();
// Register a PAGEVIEW
if ($method === 'pageview') {
// Send PageView hit
$data = array(
'v' => $v,
'tid' => $tid,
'cid' => $cid,
't' => 'pageview',
'dt' => $info['title'],
'dp' => $info['slug']
);
gaFireHit($data);
} // end pageview method

// Register an ECOMMERCE TRANSACTION (and an associated ITEM)
else if ($method === 'ecommerce') {

// Set up Transaction params
$ti = uniqid(); // Transaction ID
$ta = 'SI';
$tr = $info['price']; // transaction value (native currency)
$cu = $info['cc']; // currency code

// Send Transaction hit
$data = array(
'v' => $v,
'tid' => $tid,
'cid' => $cid,
't' => 'transaction',
'ti' => $ti,
'ta' => $ta,
'tr' => $tr,
'cu' => $cu
);
gaFireHit($data);

// Set up Item params
$in = urlencode($info['info']->product_name); // item name;
$ip = $tr;
$iq = 1;
$ic = urlencode($info['info']->product_id); // item SKU
$iv = urlencode('SI'); // Product Category - we use 'SI' in all cases, you may not want to

// Send Item hit
$data = array(
'v' => $v,
'tid' => $tid,
'cid' => $cid,
't' => 'item',
'ti' => $ti,
'in' => $in,
'ip' => $ip,
'iq' => $iq,
'ic' => $ic,
'iv' => $iv,
'cu' => $cu
);
gaFireHit($data);
} // end ecommerce method
}
}
global $post;
$data = array(
// Get the queried object and sanitize it
'title' => $title = $post->post_title,
'slug' => $slug = $post->post_name
);
gaBuildHit( 'pageview', $data);

// See https://developers.google.com/analytics/devguides/collection/protocol/v1/devguide
function gaFireHit( $data = null ) {
if ( $data ) {
$getString = 'https://ssl.google-analytics.com/collect';
$getString .= '?payload_data&';
$getString .= http_build_query($data);
$result = wp_remote_get( $getString );

#$sendlog = error_log($getString, 1, "[email protected]"); // comment this in and change your email to get an log sent to your email

return $result;
}
return false;
}

Я получил несколько ошибок по пути, которые начались с того, что функция wp_remote_get () не была определена, в результате чего я включил:

require( ABSPATH . WPINC . '/http.php' );

Это включение переместило список ошибок в класс WP_Http (), который не был найден, что привело к моему включению:

require( ABSPATH . WPINC . '/class-http.php' );

… и так далее. Я не совсем помню ошибку, которая вызвала мое включение:

require( ABSPATH . WPINC . '/general-template.php' );

Я считаю, что это была фатальная ошибка PHP: вызов неопределенной функции get_bloginfo ().

Во всяком случае, я думаю, что я делаю неправильно. Последняя фатальная ошибка: Неустранимая ошибка: вызов неопределенной функции home_url () в / home /пользователь/ Public_html /домен/wp-includes/general-template.php в строке 658

Я немного посмотрел Кодекс WordPress, и кажется, что wp_remote_safe_post () был бы лучшим вариантом, с Google рекомендует POST вместо GET из-за ограниченной полезной нагрузки на GET.

К сожалению, мне не хватает опыта, чтобы понять, как должен использоваться код, я надеялся, что исходный код будет достаточно хорош для реализации, возможно, с некоторыми изменениями.

Я делаю что-то не так с включениями? Или WordPress 4.6.1 продвинулся так далеко, что все это устарело? Или, может быть, я использую неправильный файл functions.php?

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]