WP-PostViews a odświeżanie

tech • 208 słów • 1 minuta czytania

WP-PostViews jest prostym licznikiem czytań notki dla WordPressa. Niestety plugin ten nie jest odporny na odświeżanie strony, dlatego jego pomiary tak do końca nie są poprawne i rzeczywiste. Zawsze się znajdzie osoba, która podbije co jakiś czas wartość przeczytań odświeżając kilkakrotnie stronę…

Od dawna wiedziałem o tym problemie, ale dopiero dziś rozmowa z Wojciechem skłoniła mnie do wprowadzenia małej poprawki do tej wtyczki, w celu zabezpieczenia przed powtórnym odświeżeniem strony przez tego samego usera.

Najprostszym zabezpieczeniem jest zastosowanie ciasteczek, które będą informowały o obecności danego użytkownika. Czas życia ciastka ustawiłem na 10 minut, bo nie ma potrzeby blokowania licznika na całą dobę. W końcu jest to pomiar czytań, a nie unikalnych załadowań. A jak wiadomo czytać dany tekst można wiele razy w ciągu doby. Dlatego 10 minut powinno być wystarczające :)

W pliku plugina trzeba znaleźć taki fragment kodu:

update_post_meta($id, 'views', ($post_views+1));

i zamienić go na poniższy:

if ($_COOKIE['post'.$id] <> "1") {
	update_post_meta($id, 'views', ($post_views+1));
	setcookie("post".$id, "1", time()+1800);
}

Od teraz mogę cieszyć się bardziej pewnymi i rzetelnymi pomiarami. Nikt mi nie będzie nabijał licznika! No chyba, że znajdzie się jakiś “nawiedzony” odwiedzający, który specjalnie będzie czyścił swoje “ciasteczka” w przeglądarce i na złość odświeżał stronę…

Link do postu na Polskim Supporcie WP poruszającego temat tej wtyczki ;)

Komentarze (3)

WaLLacE
20060708-200454-wallace

Chyba bardziej prawidłowo będzie:

if ( !isset( $_COOKIE['post'.$id] ) ) { ... }

W końcu nie jest istotne jaką wartość ma ciasteczko, a PHP nie bedzie wywalał NOTICE.

MalCom
20060709-011431-malcom

W sumie racja, tak będzie lepiej :) Ale zresztą kto ma włączone wyświetlanie ostrzeżeń NOTICE, w końcu to nie Warning :P

WaLLacE
20060709-093629-wallace

Nikt mądry :) Ale zawsze to 0.00001 sekundy szybciej skrypt wykonany ;-)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/