WordPress contatore di visite nel post con o senza plugin
da Massimo Della Rovere · pubblicato il 21 Gennaio, 2013 · modificato il 14 Luglio, 2016

Sicuramente tutti quanti vi sarete accorti utilizzando WordPress che il nostro blog non tiene traccia del numero di visualizzazioni che vengono eseguite su un post o su una pagina. Sinceramente non ho mai capito perchè un’informazione così semplice non sia stata implementata nella distribuzione standard, in ogni caso se avete necessità di sapere o anche indicare il numero di visualizzazioni sulla vostra pagine web, potete utilizzare due diversi metodi, il primo è installare un plugin che svolge la funzione, il secondo è quello di implementare del codice all’interno del vostro tema.

Contatore di visualizzazioni con l’utilizzo di un plugin

Nel reposity ufficiale di WordPress ci sono diversi plugin che svolgono questa funzione, ad esempio potete usare Simple Post Views Counter o WP-PostViews. Se volete plugins alternativi fate una ricerca specifica con tag=views. In base al plugin che sceglierete dovrete eseguire attentamente le istruzioni di configurazione riportate, infatti alcuni plugin inseriscono automaticamente il codice per la visualizzazione del contatore, invece altri mettono a disposizione delle funzioni che vanno implementate nel file del vostro tema. Ci sono dei plugin particolari che mettono a disposizione anche shortcode e widget per le sidebar con le statistiche, ad esempio Post Views Count.

Ovviamente, il contatore comincia ad incrementarsi dal momento che viene installato il plugin, quindi tutte le statistiche che riguardano gli accessi passati non saranno presi in considerazione, se questo dovesse essere un problema per voi, vi consiglio di inserire a mano per i post più importanti il numero delle visualizzazioni di pagina presi da strumenti come google analytics. Io ho avuto un cliente che voleva a tutti i costi questa informazione e diciamo che sono riuscito a trovare una soluzione soddisfacente proprio andandomi a prendere i dati dal prodotto di google.

Contatore di visualizzazioni con l’utilizzo di codice PHP

Se sei un programmatore e vuoi implementare la funzione direttamente nel tema, senza utilizzare un plugin, puoi aggiungere del codice nel function.php del tema. Bisognerà scrivere le seguenti funzioni: Funzione per inserire il campo “numero di visite” al post, funzione per il salvataggio di un valore che possiamo impostare dal pannello di amministrazione, funzione che incrementa il contatore ogni volta che la pagina viene richiesta, funzione per reperire il valore corrente del numero di visualizzazioni effettuate sul post o sulla pagina che è stata richiesta. Ovviamente i nomi usati per le funzioni sono solo degli esempi, utilizzate dei nomi che si adattino al vostro tema.

1. Funzione che ad ogni vista incrementa il contatore

Viene aggiunta un’azione durante la fase di elaborazione sezione head da parte di WordPress, se un post is_singular() aggiorno contatore.

// Funzione per aggiornare il campo personalizzato
// contenente il numero delle visualizzazioni del post

function my_track_post_views()
{
  if (is_singular() and !is_admin()) 
  {
    $count = get_post_meta(get_the_ID(),'_post_views',true);

    // Se non trovo il valore o per caso contiene
    // dei valori non numerici inizializzo il contatore 

    if (!is_numeric($count) or $count == '') {
      delete_post_meta(get_the_ID(),'_post_views');
      add_post_meta(get_the_ID(),'_post_views','1');
    }

    // Aggiornamento del contatore "custom post field"
    update_post_meta(get_the_ID(),'_post_views',$count+1);
  }
}

// Aggiungo la funzione su azione wp_head in maniera
// da essere eseguita durante il caricamento iniziale

add_action('wp_head','my_track_post_views');

2. Funzione che reperisce le views per il post corrente

Questa funzione dovrà essere richiamata nel file del template che si desidera integrare con il contatore. Quindi la funzione deve essere sempre definita in function.php ma deve essere richiamata dal fil ein cui volete rendere il numero visibile pubblicamente.

// Funzione da definire nel function.php la quale
// Deve essere richiamata dal vostro template per la visualizzazione

function get_track_post_views() {
  $count = get_post_meta(get_the_ID(),'_post_views',true);
  if (is_numeric($count)) return $count; else return 0;
}

// In qualsiasi parte del vostro tema e precisamente dove volete
// visualizzare il numero delle views legate al post

echo get_track_post_views();

3. Funzioni per l’aggiunta di un meta box

In linea di principio questo codice dovrebbe bastare a far funzionare il contatore, il problema è che in questa maniera non avrete nessuno strumento nel pannello di amministrazione per controllare i contatori del numero delle viste e tanto meno modificarli a proprio piacimento. Ad esempio come abbiamo vista precedentemente inserire le vecchie statistiche. Quindi, se volete qualcosa di più completo, dobbiamo aggiungere ancora altre funzioni per il pannello di amministrazione.

contatore-di-visite

Con queste funzioni aggiungeremo un box laterale con la visualizzazione delle statistiche legate al contatore post-views e la possibilità di cambiarle.

/* Aggiunta delle funzioni per le definizioni dei meta box */
function my_add_meta_box() {
  add_meta_box('my_mb','Statistics','my_mb_form','post','side');
  add_meta_box('my_mb','Statistics','my_mb_form','page','side');
}

add_action('add_meta_boxes','my_add_meta_box');
add_action('save_post','my_mb_save');

/* Funzione per la creazione del form */
function my_mb_form()
{
  $id = get_the_ID();
  $views = get_post_meta($id,'_sz_post_views',true);

  echo '<table class="form-table">';
  echo '<tr>';
  echo '<td><label for="_post_views">'.'View'.'</label></td>';
  echo '<td><input type="number" name="_post_views" id="_post_views" ';
  echo 'value="'.$views.'"></td>';
  echo '</tr>';
  echo '</table>';
}

/* Funzione per il salvataggio del form */
function my_mb_save() 
{
  $id    = get_the_ID();
  $key   = '_post_views';
  $value = $_POST[$key];

  if(get_post_meta($id,$key,false)) update_post_meta($id,$key,$value);
    else add_post_meta($id,$key,$value);
}

4. Aggiungere il numero delle view negli elenchi

Un altro posto dove potrebbe essere utile vedere il numero delle visualizzazioni è nelle schermate che elencano i nosti post o le nostre pagine. Per fare questo basta definire dei filtri particolari e aggiungere delle piccole funzioni al codice che abbiamo già sviluppato fino in questo momento. Prima del codice vi elenco qui di seguito il risultato:

Contatore di visite

Integrate il vostro codice con queste istruzioni aggiuntive, io per il momento ho aggiunto l’informazione sui post e sulle pagine, ma in realtà è possibile aggiungere dei filtri anche a dei custom post type, per questo vi rimando alla documentazione codex.

// Funzione per la visualizzazione delle views su
// elenco standard dei post e delle pagine wordpress

function oo_theme_columns_posts($defaults) {
  $defaults['views'] = ucfirst(__('views','textdomain'));
  return $defaults;
}

function oo_theme_columns_custom($column_name,$id) {
  if($column_name === 'views'){
    echo get_post_meta($id,'_post_views',true);
  }
}

// Funzione per la visualizzazione delle views su
// elenco standard dei post e delle pagine wordpress

add_filter('manage_posts_columns','oo_theme_columns_posts',5);
add_filter('manage_pages_columns','oo_theme_columns_posts',5);

add_action('manage_posts_custom_column','oo_theme_columns_custom',5,2);
add_action('manage_pages_custom_column','oo_theme_columns_custom',5,2);

Conclusioni generali

Mentre sviluppate questa piccola funzionalità non copiate tutto il codice che vedete nel vostro function.php ma seguite i passi uno alla volta controllando che funzioni il tutto, in questa maniera qualsiasi problema saprete esattamente dove andare a controllare. In ogni caso vi ho pubblicato su GitHub i sorgenti che utilizzo per il mio tema, se volete partire da quelli li trovate sul mio repository wordpress.post.views.

13 Commenti

  1. Ciao, ho provato il codice per il contatore e funziona perfettamente. Ma dopo la modifica non si apre più la libreria media di wordpress. Consigli?

  2. Ciao Massimo, ho provato ad utilizzare il tuo contatore ma, non mi visualizza nulla sui posts.... Cosa posso fare per verificare? Ho inserito un valore 100 nella meta-box ma non viene visualizzato da nessuna parte

  3. C'è un errore nel paragrafo 3. Il codice riportato:

    function my_add_meta_box() {
    add_meta_box('my_mb','Statistics'),'my_mb_form','post','side');
    add_meta_box('my_mb','Statistics'),'my_mb_form','page','side');
    }

    Presenta una parentesi di troppo dopo Statistics.
    Il codice corretto è:

    function my_add_meta_box() {
    add_meta_box('my_mb','Statistics','my_mb_form','post','side');
    add_meta_box('my_mb','Statistics','my_mb_form','page','side');
    }

    Grazie, Ciao!

  4. Grazie Filippo, ho corretto il sorgente PHP dell’articolo. Purtroppo ho il brutto vizio di scrivere il codice direttamente durante l’articolo, devo migliorare questa cosa e fare un copia incolla. Grazie ancora.

  5. Grandissimo mi metto subito a provare :)
    Adoro questo genere di tutorial, semplice e pratico! Grazie!

  6. Ciao Massimo, davvero un articolo utilissimo, grazie mille!!! Mi permetto di segnalarti che al punto 2 riga 5 manca un ";" dopo il return $count ( if (is_numeric($count)) return $count[MANCA QUI] else return 0; ). Magari gli utenti che hanno avuto errori è solo per questo semplice motivo :)

    Saluti, Marco

  7. Grazie mille Marco. Ho corretto subito l'articolo e ti ringrazio per avermi riportato l'errore. Sicuramente adesso va meglio :)

  8. Era la guida che cercavo! ;-)

  9. Ciao. Io sul mio blog wordpress ho sia il contatore di default del tema che google analytics. Non capisco perché i dati sono molto discordanti (più basse su google analytics). Mi posso fidare del contatore wordpress?

  10. A mio parere analytics, a differenza di un comune plugin o di questo esempio tiene conto anche dell'ip con cui accedi alla pagina e probabilmente un timestamp o altre info utili. Perchè altrimenti se mi metto a "refreshare" la pagina di continuo farò incrementare il contatore vertiginosamente, ma questo non è molto veritiero per una statistica di questo genere.

    Ciò non toglio un plus a questo tutorial perchè oltre al contesto (contatore visite) è una buona lettura per uno svluppatore, la spiegazione degli statement è molto chiara. Bravo Massimo :)

  11. Sicuramente Google Analytics ha un algoritmo molto piú complesso e riconosce anche le visite uniche, controlla il tempo del cookie ed altre cose. Qui parliamo di un semplice contatore di pagina che incrementa ad ogni visualizzazione. È per avere una metrica di riferimento.

  12. ciao …tu dici: “Ovviamente, il contatore comincia ad incrementarsi dal momento che viene installato il plugin, quindi tutte le statistiche che riguardano gli accessi passati non saranno presi in considerazione, se questo dovesse essere un problema per voi, vi consiglio di inserire a mano per i post più importanti il numero delle visualizzazioni di pagina presi da strumenti come google analytics. Io ho avuto un cliente che voleva a tutti i costi questa informazione e diciamo che sono riuscito a trovare una soluzione soddisfacente proprio andandomi a prendere i dati dal prodotto di google.”

    bene è quello che vorrei fare io mi sai dire in quale tabella/colonna dovrei inserire quel numero? ho wordpress 3.6 e il tema di Vista .. Grazie

  13. Ciao Mimmo, per prima cosa devi conoscere gli indirizzi URL o i titoli dei post su cui vuoi ricavare le visite effettuate o le visualizzazioni, vai su google analitycs sul profilo del sito interessato (senza filtri possibilmente) e seleziona sulla sinistra:

    Contenuti => Contenuti del sito => Tutte le pagine

    A questo punto puoi ordinare l’elenco per nome pagina o titolo, scegli quello più adatto alle tue esigenze, seleziona il periodo di tempo in alto a destra per cui vuoi totalizzare i dati e ricopia i valori in wordpress.

condividi