Jak zjistit, odkud přišel návštěvník, který okomentoval váš web?


Ve Fitness i na webu platí zlaté či platinové (či jakékoliv kovové) pravidlo, že co se dá změřit, to se dá zlepšit. K tomu se samozřejmě výborně hodí Google Analytics, kde lze měřit konverze například v podobě okomentovaných článků. Taková data sice poskytnou rychlý přehled, ale když potřebujete vědět, odkud k vám přišel autor konkrétního komentáře, jste namydlení. Data z googlu jsou totiž anonymní.

Nejsem kouzelník, který by to zvládl zjistit zpětně, ale v dnešním článku si ukážeme, jak vytvořit plugin, který načte data o uživateli, zjistí si, odkud přišel, a následně tento údaj uloží do databáze v momentě, kdy okomentuje článek.

Zjisti

První krok je správně analyzovat příchod uživatele na web. Pokud přišel přes nějakou kampaň, rozpoznáme to tak, že v url nalezneme parametry utm_campaign nebo utm_medium nebo utm_source. Pakliže nic takového v url nenalezneme, pokusíme se ještě určit referera stránky, tedy z jaké domény uživatel přišel. A pokud se cokoliv z toho změní, uložíme si data pěkně do session.

Kód vypadá následovně:

<?php

function tc_updateReferer($referer)
{
    session_start();
    $_SESSION['comment_referer'] = $referer;
}

function tc_init()
{
    // do track users in admin
    if (is_admin()) {
        return;
    }

    $toSet = [];

    // first check for parameters in url
    $parametersToSeach = ['utm_campaign', 'utm_medium', 'utm_source'];

    foreach ($parametersToSeach as $parameter) {
        if (isset($_GET[$parameter]) && $_GET[$parameter]) {
            $toSet[$parameter] = $_GET[$parameter];
        }
    }

    // if we found some parameters, save them and end this script
    if (count($toSet) > 0) {
        tc_updateReferer('?' . http_build_query($toSet));
        return;
    }

    // now search for referer
    $referer = $_SERVER['HTTP_REFERER'];

    // there is no referer, anything to update
    if (!$referer) {
        return;
    }

    // referer is at same domain, dont trac it
    if (strpos($referer, '://' . $_SERVER['HTTP_HOST']) !== false) {
        return;
    }

    // we found referer, save ti
    tc_updateReferer($referer);
}

add_action('init', 'tc_init', 10);


?>

Zapiš

Dalším krokem je zapsat tento záznam do databáze v momentě, kdy návštěvník okomentuje článek. Pro lepší pochopení kódu se doporučuji mrknout na můj úvod do filtrů a akcí.

function tc_pushRefererToComment($comment_ID)
{
    session_start();
    if (isset($_SESSION['comment_referer']) && $_SESSION['comment_referer']) {
        update_comment_meta($comment_ID, 'referer', $_SESSION['comment_referer']);
    }
}

add_action('comment_post', 'tc_pushRefererToComment', 10, 1);

Zobraz

A jako poslední krok nyní zbývá uložená data zobrazit v administraci. Nejlepší bude udělat si takový malý hack. Na výpis komentářů v adminu použijeme filter a referera zobrazíme pod tělem komentáře. Celé to vypadá nějak takto:

function tc_addRefererToList($text)
{
    global $comment;
    echo '<div class="comment-meta">';
    echo get_comment_meta($comment->comment_ID, 'referer', true);
    echo '</div>';
    return $tex;
}

add_filter('comment_row_actions', 'tc_addRefererToList', 10, 1);

Máte implementování? Gratuluji, jste strašný stalkeři.