Houd bij hoe vaak een pagina en bericht is bekeken door een gebruiker

door in

Houd bij hoe vaak een pagina en bericht is bekeken door een gebruiker

Ik kreeg onlangs de vraag van een van onze vaste klanten of wij een techniek konden bedenken om bij te houden hoe vaak een bericht en/of pagina is bekeken door ingelogde (geregistreerde) gebruiker. Dit hebben we uiteindelijk -door de complexiteit van de vraag- opgelost met event-tracking binnen Google Analytics. Op de achtergrond zijn we doorgegaan met een kleinere oplossing die misschien voor meerdere mensen bruikbaar kan zijn.

Single.php

Om te beginnen dien je binnen de loop van je single.php de volgende code te gebruiken.


tsd_trackViewDates();

Deze code zorgt ervoor dat het ID van de gebruikers wordt opgeslagen zodra hij de pagina bekijkt.

Verloop

In de snippet hieronder is een optie toegevoegd waarmee de tijd waarop de bezoeker de website verlaat wordt vergeleken met zijn of haar nieuwe bezoek. Als die tijd kleiner is dan een ingestelde tijd, wordt hier een waarde "false" aan gegeven. Op deze manier kun je er voor zorgen dat er specifieke meldingen op de pagina getoond worden als de bezoeker de pagina opnieuw inlaadt. Denk hierbij aan "Hey Rick, je was hier 6 minuten geleden ook... Kunnen we je misschien ergens mee helpen?" Hiervoor wordt gebruik gemaakt van 'strtotime' en in ons geval heb ik toegevoegd dan de verlooptijd 20+ minuten is.

Aan het eind van de functie vind je de optie tsd_getViewCounts();. Deze geeft gewoon het aantal unieke weergaven terug.

Code

Plaats de volgende code in je functions.php


function tsd_trackViewDates(){
  global $post, $current_user;
  $data_key = '_utime';
  $utime = time();
  $data = get_post_meta($post->ID, $data_key, true);

  if(is_array($data)){

        if ( !in_array( $current_user->ID, $data ) ) {
            $data[$utime] = $current_user->ID;
            $data = array_unique($data, SORT_NUMERIC );
            update_post_meta($post->ID, $data_key, $data, false);
        }else{
            $saved_time = array_search($current_user->ID, $data);
            $expiry_time = strtotime("+20 minutes",$saved_time); // expires time
            if($expiry_time < $utime) return true;
        }

  }else{
    $data = array();
    $data[$utime] = $current_user->ID;
    add_post_meta($post->ID, $data_key, $data, false);
  }

}

function tsd_getViewCounts(){
  global $post, $current_user;
  $data_key = '_utime';
  $data = get_post_meta($post->ID, $data_key, true);
  if(is_array($data)){ echo count($data); }
}

Om te bekijken welke waarde de expire functie teruggeeft kun je de volgende functie gebruiken:


if(tsd_trackViewDates() == true){
       echo 'message when true';
}else{
       echo 'message when false';
}