Stai cercando un modo per tracciare le visualizzazioni dei post senza un plugin utilizzando i metadati dei post? Sebbene probabilmente esista un plugin per questo, abbiamo creato un rapido snippet di codice che puoi utilizzare per tracciare le visualizzazioni dei post senza un plugin utilizzando i metadati dei post in WordPress.
Istruzioni:
Aggiungi questo codice al file functions.php del tuo tema o in un plugin specifico per il sito:
function getPostViews($postID){
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
return "0 View";
}
return $count.' Views';
}
function setPostViews($postID) {
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}else{
$count++;
update_post_meta($postID, $count_key, $count);
}
}
// Remove issues with prefetching adding extra views
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0);
Facoltativamente, aggiungi anche questo codice a una colonna nell'area di amministrazione di WordPress che visualizza le visualizzazioni dei post:
// Add to a column in WP-Admin
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',5,2);
function posts_column_views($defaults){
$defaults['post_views'] = __('Views');
return $defaults;
}
function posts_custom_column_views($column_name, $id){
if($column_name === 'post_views'){
echo getPostViews(get_the_ID());
}
}
Questa parte del codice di tracciamento delle visualizzazioni imposterà le visualizzazioni dei post. Posiziona semplicemente questo codice di seguito all'interno del file single.php all'interno del Loop di WordPress.
<?php
setPostViews(get_the_ID());
?>
Nota sulla cache dei frammenti: Se stai utilizzando un plugin di caching come W3 Total Cache, il metodo sopra per impostare le visualizzazioni non funzionerà poiché la funzione setPostViews() non verrebbe mai eseguita. Tuttavia, W3 Total Cache ha una funzionalità chiamata fragment caching. Invece di quanto sopra, usa quanto segue in modo che setPostViews() venga eseguito correttamente e tracci tutte le tue visualizzazioni dei post anche quando hai la cache abilitata.
<!-- mfunc setPostViews(get_the_ID()); --><!-- /mfunc -->
Il codice seguente è facoltativo. Usa questo codice se desideri visualizzare il numero di visualizzazioni all'interno dei tuoi post. Posiziona questo codice all'interno del Loop.
<?php
echo getPostViews(get_the_ID());
?>
Nota: Se questa è la prima volta che aggiungi snippet di codice in WordPress, consulta la nostra guida su come copiare / incollare correttamente snippet di codice in WordPress, in modo da non rompere accidentalmente il tuo sito.
Se ti è piaciuto questo snippet di codice, prendi in considerazione la possibilità di consultare i nostri altri articoli sul sito come: 10 migliori plugin per testimonianze di WordPress e come impostare il tracciamento dell'autore in WordPress con Google Analytics.
Qualche idea su come usarlo con un Custom Post Type?
roba fantastica esattamente quello che stavo cercando?
fantastico sono contento che ti piaccia lo snippet buon divertimento.
Allo stesso modo possiamo contare il numero di immagini caricate sul sito WordPress, sono sicuro che possiamo.. qualche indizio?
Scusa per il ritardo!
http://wpsnipp.com/index.php/functions-php/count-total-number-of-jpg-gif-png-images-in-media-library/
Esempio di Bob è possibile?
Post più visti
Titolo post3 100 visualizzazioni
Titolo post1 50 visualizzazioni
Titolo post2 10 visualizzazioni
qual è l'impatto dell'utilizzo di questa funzione sul database di WordPress.. sarò in grado di cancellare i log (visualizzazioni) a intervalli prestabiliti.. ??
Questo non è un plugin con molte funzionalità, semplicemente incrementerà il conteggio nei metadati del post di uno ogni volta che il post viene visualizzato.
come rimuovere la parola "Visualizzazioni"?
Ciao Joj,
Vedrai alla riga 09 return $count.’ Views’;
sostituisci quella riga con quella sottostante e il gioco è fatto.
return $count;
Grazie per lo snippet. Ho modificato leggermente setPostViews() per scontare le visualizzazioni dei post da Editor o superiori:
function setPostViews($postID) {if (!current_user_can('level_7') ) :
$count_key = 'post_views_count';
$count = get_post_meta($postID, $count_key, true);
if($count==''){
$count = 0;
delete_post_meta($postID, $count_key);
add_post_meta($postID, $count_key, '0');
}else{
$count++;
update_post_meta($postID, $count_key, $count);
}
endif;
}
Grazie Drew, molto bello.
Non funziona per me in localhost. Non sono sicuro del perché, ma ogni visualizzazione, indipendentemente dal livello dell'Editor o superiore, viene conteggiata.
A proposito, come si disabilita il conteggio delle visualizzazioni da parte dell'autore del post?
Ops. Non ero loggato come amministratore durante il test. (facepalm)
Sono contento di sentire che hai risolto.
Ciao Kevin!
Ho provato questo codice su una nuova installazione di WP 3.2 e funziona bene. Ho notato però che, sebbene dovrebbe aumentare il conteggio solo di 1, il mio lo fa di 4. Suggerimenti su cosa potrebbe essere sbagliato?
Ho impostato le funzioni nel posto giusto e l'unica modifica che ho apportato è stata quella di escludere i conteggi dai visitatori loggati. Anche senza questa modifica, il codice dà 4 visualizzazioni invece di 1.
Huh, dovrebbe contare solo uno, dato che è solo count++ hai avuto altre persone che hanno visitato il tuo sito mentre era in esecuzione o più schede aperte?
È sul mio localhost. È davvero strano ma potrebbe essere solo una cosa del browser. Grazie comunque per un bel piccolo snippet!
Kevin,
Prima di tutto, adoro la semplicità di questa soluzione! Ho il codice che funziona correttamente sul mio server locale, ma ho notato che quando ricarico la mia homepage (che contiene i miei 5 articoli più recenti) ogni ricaricamento della mia homepage aggiunge una visualizzazione al conteggio per ciascuno dei 5 post. C'è un modo per evitarlo e contare solo le visualizzazioni effettive dell'articolo? Grazie
Ciao Rgsanchezz, sono contento che ti piaccia lo snippet. Per quanto riguarda la tua domanda, assicurati di inserire setPostViews(get_the_ID()); all'interno del template single.php o all'interno di if(is_singular()) dovrebbe funzionare anche se non usi un template single.php, questo dovrebbe risolvere il problema.
Hai usato questo snippet in un loop separato? Se sì, dovresti posizionare setPostViews(get_the_ID()); al di fuori del loop "più visti" in modo che conti il +1 solo per il post attualmente visualizzato e non per tutti quelli nell'elenco. Ad esempio:
SBAGLIATO:
( ) CORRETTO: ( )
Scusa, ho incollato il codice nella casella di risposta. L'ho accorciato tramite codepad, controllalo lì : )
http://codepad.org/QOUWc3XB
È solo una finta, niente di più, amico. Se stai controllando in Firefox, lo mostrerà, ma se controlli il tuo URL in Chrome e IE, non viene visualizzato lì. Quando controlli in Firefox, mostrerà solo le tue visualizzazioni, niente di più... e se pensi che sia un mio problema, dimmelo.
Ciao Sunnysuffy, beh, lo snippet non è falso, tuttavia, se hai un software di caching in esecuzione sulla tua copia di WordPress, avrebbe problemi a funzionare. Supercache, ecc.
[...] un buon esempio del tipo di suggerimenti che troverai su wpsnipp.com è "Traccia le visualizzazioni dei post senza un plugin usando i meta dei post". Kevin inizia descrivendo cosa farà lo snippet, e poi ti dà un [...]
hey, è fantastico..
mille grazie.
Fantastico, sono contento che ti piaccia lo snippet.
fantastico, grazie!
prego @4f9649a2dc0c5d186623a62544564bfe:disqus sono contento che ti piaccia lo snippet!
Inutile dire che questo è uno snippet fantastico. Ma se ci fosse una soluzione per farlo funzionare con i plugin di caching, ad esempio con W3TC, sarebbe ancora meglio.
Comunque, buon lavoro!
Non ci ho guardato, darò un'occhiata più da vicino ad alcuni dei plugin e vedrò cosa posso fare. Sono contento che ti piaccia lo snippet, però.
Ciao Kevin, ho navigato nei forum per trovare una soluzione. Apparentemente molte persone hanno problemi a escludere le funzioni dalla cache. Sfortunatamente, sembra non esserci ancora una cura. Sono sicuro che c'è. Speriamo che uno di noi trovi qualcosa presto 🙂
ciao, per quanto ne so W3TC ha "Ignored query stems" per filtrare alcune funzioni dalla cache.
ciao belle informazioni, è possibile usare echo getPostViews(get_the_ID()); nel pannello di amministrazione della sezione post se voglio usare le visualizzazioni dei post solo per scopi personali/amministrativi
Sì, puoi. Ho pubblicato uno snippet poco dopo proprio per questo motivo.
http://wpsnipp.com/index.php/functions-php/display-post-views-within-admin-post-columns/
È fantastico, funziona benissimo. Lo userò su un nuovo sito di sfondi su cui sto lavorando. Ho annotato il tuo sito nelle funzioni per riferimento futuro.
Mi chiedo se si possa fare qualcosa per registrare solo 1 visualizzazione per sessione per ogni utente. Sarebbe bello per evitare visualizzazioni "false" quando si aggiorna la pagina. Se qualcuno può farlo (se è anche solo possibile) sarebbe fantastico.
Grazie @6c9628c836d0d3ed67e8ef3b43a993dd:disqus Lieto di sapere che ti piace lo snippet! Sono sicuro che qualcosa del genere si potrebbe fare, tuttavia lo userei come metodo per tracciare la popolarità di un post piuttosto che per statistiche dettagliate.
Ho un problema con questo, se visualizzo il post più recente ma uno, al post più recente viene aggiunta 1 visualizzazione, qualche idea sul perché?
L'unica ragione che mi viene in mente è che non hai la funzione setPostViews(get_the_ID()); all'interno di single.php? puoi confermare che sia così...
Sì, è in single.php nel loop
Ho lo stesso problema dopo aver impostato una lista dei post più popolari nella barra laterale, usando l'articolo "post più popolari usando le visualizzazioni del meta post". setPostViews(get_the_ID()); è in single.php. setPostViews(get_the_ID()); è in single.php.
Ho anche un problema qui. Il mio è in single.php, ho seguito le istruzioni. Tuttavia noto che se visito un post (con un ID post diciamo 20), un altro post (con un ID post diciamo 22) riceve anche lui +1 al conteggio delle visualizzazioni. La cosa strana è che quando faccio l'echo dell'ID del post ricevuto dalla funzione setPostViews, solo l'ID del post 20 viene visualizzato sul mio schermo.
Beh, dovrebbe funzionare senza problemi, tuttavia se modifichi i post puoi vedere il campo personalizzato aggiunto con le visualizzazioni attuali del post. Ricaricherei la pagina e vedrei se il campo personalizzato si aggiorna su entrambi i post. Quale versione di WordPress stai attualmente usando?
Avevo lo stesso problema. Mi ci è voluto un sacco di tempo per capirlo. Il problema è causato da Wordpress che carica i link relazionali per i post precedenti e successivi nell'intestazione. Firefox, per impostazione predefinita, precarica i link REL con il valore Next, quindi entrambi i post vengono "visualizzati".
La soluzione che ho trovato è stata rimuovere l'azione che aggiunge questa funzionalità alla funzione wp_head: remove_action( ‘wp_head’, ‘adjacent_posts_rel_link_wp_head’, 10, 0);
Chris, grazie per il commento ho aggiornato il post per informare gli altri di questa correzione per il problema. Ho anche aggiunto un link al tuo sito. Grazie ancora,
Ciao Wprebel, potresti avere un plugin o qualcos'altro che ha causato un problema con lo snippet. Lo snippet è piuttosto semplice e aggiorna solo i meta del post quando un utente carica il post, non c'è molto da sbagliare. Senza esaminare in dettaglio il tuo tema, potrei solo fare delle ipotesi,
@e4fcff6cc58dc5e1b2ab556d9cdb2cb2:disqus devi usare la funzione getPostViews() quando vuoi visualizzare le visualizzazioni dei post e setPostViews() su single.php.
[…] Traccia le visualizzazioni dei post senza un plugin usando i meta dei post […]
[…] Via: link […]
Questa tecnica non funzionerà con i plugin di cache. Vorrei usare il plugin WP-PostViews poiché offre una migliore compatibilità con i plugin di cache.
Questo è vero, non va d'accordo con i plugin di cache. Tuttavia, come snippet rapido per tracciare le visualizzazioni, funziona abbastanza bene.
Rinominerei la chiave meta post_views_count in _post_views_count per renderla nascosta ed evitare che gli utenti modifichino le visualizzazioni dei post dai campi personalizzati.
Ahh buona idea Daniel, potresti farlo.
[…] vorresti visualizzare il numero di visualizzazioni: <?php echo getPostViews(get_the_ID()); ?> Fonte → Traccia l'importo delle visualizzazioni dei post utilizzando i meta dei post Questo snippet creerà un elenco dei tuoi post più popolari […]
C'è un modo per fare una panoramica dei post più visti?
Proprio come i popolari nella tua barra laterale, ma utilizzando le visualizzazioni dei post invece dei commenti?
Ciao Alec,
Ho appena finito un post per questo ieri e lo pubblicherò tra circa un'ora.
Prima volta che visito il tuo sito, e già il mio eroe! +1
È possibile creare un elenco dei post più visti basato su questo codice?
Non sono sicuro di aver capito, puoi spiegare un po' più nel dettaglio.
Esempio:
Post più visti
Titolo post3 100 visualizzazioni
Titolo post1 50 visualizzazioni
Titolo post2 10 visualizzazioni
Ciao Bob,
Sì, avevo pensato di fare qualcosa del genere, ci lavorerò un po' e posterò uno snippet.
Ho appena trovato questo post.
http://www.moocr.com/blog/posts/2010/display-posts-views-count-without-plugin-in-wordpress.html
Ho fatto quello che dice il ragazzo. Non sembra funzionare. Funziona in localhost?
Dovrebbe funzionare bene in locale, tuttavia dovresti ricaricare la pagina per vedere le visualizzazioni. Non dimenticare di inserire setPostViews nel loop all'interno di single.php. L'ho testato su wpsnipp.com per tracciare le visualizzazioni e ha funzionato bene. Quello che fa lo snippet è aggiungere un numero ai metadati del post e poi incrementarlo ogni volta che viene caricato single.php. Che versione di WordPress stai usando?
Grazie. Ho appena scoperto che non lo stavo implementando correttamente.
Fantastico, sono contento che tu abbia risolto tutto perfettamente...
Devo impostarli manualmente?:/
Sì, dovresti aggiungere questo codice manualmente ai tuoi template di WordPress.
Ottima condivisione Chad. Grazie 😀