Toms Welt


Count per Day

3.521 Kommentare | Kommentar schreiben

"Count per Day" ist ein Besucherzähler für WordPress.

Die Seitenaufrufe werden pro Artikel gespeichert. Dabei wird als "Reload-Sperre" nur ein Aufruf pro IP-Adresse und Tag berücksichtigt.

Beispiel: Wenn ein Leser 5 Artikel ansieht, sind alle "1 mal gelesen", aber der Gesamtzähler erkennt, dass es nur ein Besucher war.
Die Aufrufe können pro Artikel angezeigt werden. Im Admin-Bereich gibt es weitere Statistiken.


If you get PHP inet_pton errors, use this patched file.
Copy the unzipped file to wp-content/count-per-day-geoip.

Count per Day 3.5.7

Contributors: Tom Braider
Tags: counter, count, posts, visits, reads, dashboard, widget, shortcode
Requires at least: 3.0
Tested up to: 4.8
Stable tag: 3.5.7
License: GPLv2
Donate link:

Visit Counter, shows reads and visitors per page, visitors today, yesterday, last week, last months and other statistics.


"Count per Day" counts 1 visit per IP per day. So any reload of the page do not increment the counter.

Languages, Translators


  1. unzip plugin directory into the /wp-content/plugins/ directory
  2. activate the plugin through the Plugins menu in WordPress

The activation will create or update a table wp_cpd_counter.

The Visitors-per-Day function use 7 days as default. So don't surprise about a wrong value in the first week.


See the Options Page and check the default values.

Frequently Asked Questions

Need Help? Find Bug?

read and write comments on


  1. 1. Statistics on Count-per-Day Dashboard

  2. 2. Options

  3. 3. Widget sample

Arbitrary section


You can use these shortcodes in the content of your posts to show a number or list
or in your theme files while adding e.g. <?php echo do_shortcode("[THE_SHORTCODE]"); ?>.
To use the shortcodes within a text widget you have to add add_filter("widget_text", "do_shortcode"); to the functions.php of your theme.

[CPD_MOST_VISITED_POSTS limit="5" days="30" postsonly="1" posttypes="posts,pages"]
  • limit (optional): max records to show, default = all
  • days (optional), show last x days
  • postsonly (optional), 1 = don't show index pages
  • posttypes (optional), show this posttypes only, sets postsonly to 1
[CPD_POSTS_ON_DAY date="2010-10-06" limit="3"]
  • date (optional), format: year-month-day, default = today
  • limit (optional): max records to show, default = all
[CPD_MAP width="500" height="340" what="reads"]
  • width and height: size, default 500x340 px
  • what: map content - reads|visitors|online, default reads
[CPD_SEARCHES days="14" limit="20"]
  • days (optional), show last x days
  • limit (optional): show x most searched strings

You can place these functions in your template.
global $count_per_day;
if(method_exists($count_per_day,"show")) echo $count_per_day->getReadsAll(true);

to check if plugin is activated.

show( $before, $after, $show, $count, $page )'
  • $before = text before number e.g. <p> (default "")
  • $after = text after number e.g. reads</p> (default " reads")
  • $show = true/false, "echo" complete string or "return" number only (default true)
  • $count = true/false, false will not count the reads (default true)
  • $page (optional) PostID
  • only count reads, without any output
  • show call it
getFirstCount( $return )
  • shows date of first count
  • $return: 0 echo, 1 return output
getUserPerDay( $days, $return )
  • shows average number of visitors per day of the last $days days
  • default on dashboard (see it with mouse over number) = "Latest Counts - Days" in options
  • $return: 0 echo, 1 return output
getReadsAll( $return )
  • shows number of total reads
  • $return: 0 echo, 1 return output
getReadsToday( $return )
  • shows number of reads today
  • $return: 0 echo, 1 return output
getReadsYesterday( $return )
  • shows number of reads yesterday
  • $return: 0 echo, 1 return output
getReadsLastWeek( $return )
  • shows number of reads last week (7 days)
  • $return: 0 echo, 1 return output
getReadsThisMonth( $return )
  • shows number of reads current month
  • $return: 0 echo, 1 return output
getReadsPerMonth( $return )
  • lists number of reads per month
  • $return: 0 echo, 1 return output
getUserAll( $return )
  • shows number of total visitors
  • $return: 0 echo, 1 return output
getUserOnline( $frontend, $country, $return )
  • shows number of visitors just online
  • $frontend: 1 no link to map
  • $country: 0 number, 1 country list
  • $return: 0 echo, 1 return output
getUserToday( $return )
  • shows number of visitors today
  • $return: 0 echo, 1 return output
getUserYesterday( $return )
  • shows number of visitors yesterday
  • $return: 0 echo, 1 return output
getUserLastWeek( $return )
  • shows number of visitors last week (7 days)
  • $return: 0 echo, 1 return output
getUserThisMonth( $return )
  • shows number of visitors current month
  • $return: 0 echo, 1 return output
getUserPerMonth( $frontend, $return )
  • lists number of visitors per month
  • $frontend: 1 no links
  • $return: 0 echo, 1 return output
getUserPerPost( $limit, $frontend, $return )
  • lists $limit number of posts, -1: all, 0: get option from DB, x: number
  • $frontend: 1 no links
  • $return: 0 echo, 1 return output
getMostVisitedPosts( $days, $limits, $frontend, $postsonly, $return, $posttypes )
  • shows a list with the most visited posts in the last days
  • $days = days to calc (last days), 0: get option from DB
  • $limit = count of posts (last posts), 0: get option from DB
  • $frontend: 1 no links
  • $postsonly: 0 show, 1 don't show categories and taxonomies
  • $return: 0 echo, 1 return output
  • $posttypes: comma separated list of post types, default: empty to show all
getVisitedPostsOnDay( $date, $limit, $show_form, $show_notes, $frontend, $return )
  • shows visited pages at given day
  • $date day in MySQL date format yyyy-mm-dd, 0 today
  • $limit count of posts
  • $show_form show form for date selection, default on, in frontend set it to 0
  • $show_notes show button to add notes in form, default on, in frontend set it to 0
  • $frontend: 1 no links
  • $return: 0 echo, 1 return output
getClients( $return )
  • shows visits per client/browser in percent
  • $return: 0 echo, 1 return output
getReferers( $limit, $return, $days )
  • lists top $limit referrers of the last $days days, 0: get option from DB, x: number
  • $return: 0 echo, 1 return output
getMostVisitedPostIDs( $days, $limit, $cats, $return_array )
  • $days last x days, default = 365
  • $limit return max. x posts, default = 10
  • $cats IDs of categories to filter, array or number
  • $return_array true returns an array with Post-ID, title and count, false returns comma separated list of Post-IDs
function getMap( $what, $width, $height, $min )
  • gets a world map
  • $what visitors|reads|online
  • $width size in px
  • $height size in px
  • $min : 1 disable title, legend and zoombar
getDayWithMostReads( $return )
  • shows day with most Reads
  • $return: 0 echo, 1 return output
getDayWithMostVisitors( $return )
  • shows day with most Visitors
  • $return: 0 echo, 1 return output
  • With GeoIP you can associate your visitors to an country using the IP address.
  • On options page you can update you current visits. This take a while! The Script checks 100 IP addresses at once an reload itself until less then 100 addresses left. Click the update button to check the rest.
  • If the rest remains greater than 0 the IP address is not in GeoIP database (accuracy 99.5%).
  • You can update the GeoIP database from time to time to get new IP data. This necessitates write permissions to wp-content/count-per-day-geoip directory.
  • If the automatically update don't work download GeoIPv6.dat.gz, extract and rename it to GeoIP.dat and load it to the count-per-day-geoip directory.
  • More information about GeoIP on



  • Bugfix: security fixes in notes, options


  • Bugfix: check/block stored bad referrers


  • Bugfix: security fixes in export, referrer and mass bot functions


  • Bugfix: check for IPv6 compatibility on settings page


  • Bugfix: undefined function cpd_inet_pton (once again)


  • Bugfix: undefined function cpd_inet_pton


  • back in WordPress plugin repository
  • Bugfix: Worldmap shortcode


  • New: PHP 7 compatibility (mysqli)
  • New: GeoIP part is now available as addon (installation with 1 click, see the settings page), because WordPress hates non GPL code in its plugin repository (after several years...)
  • Bugfix: possible daylight saving time problem in chart (hopefully)
  • Bugfix: reset function now deletes also collections


  • Bugfix: Security fix backup download


  • New: limit the length of client and referer to reduce database size and eliminate MySql strict mode errors
  • New: exclude countries you not want to count
  • New: Flash free World map
  • New: Flag of Malawi
  • Bugfix: language support without WPLANG constant
  • Bugfix: get temp directory


  • New: List of most industrious Visitors
  • New: Export data as CSV file
  • New: count given post types only
  • New: Shortcode CPD_FLOTCHART to show the big chart
  • New: Popular Posts Widget, thanks to Maurits van der Schee
  • New: Part of IP adresses in Bot List, 192.168 will block all visitors from 192.168.x.x
  • New language: Chinese, thanks to Siyuan Tang
  • Bugfix: counting of cached pages
  • Bugfix: cleaning database, delete entries per IP in bot list
  • some little fixes


  • Bugfix: Plugin dir path fixed
  • Bugfix: CSS path fixed
  • Bugfix: search word now case insensitive
  • Bugfix: Translation of widget titles
  • New: world map of current visitors
  • New: check referer agains bot list
  • New: delete clients and referers of older entries


  • Bugfix: PHP without IPv6 support
  • New Language: Persian, thanks to Mahmoud Zooroofchi
  • Hint: use "update old counter data" to repair the unknown countries


  • Bugfix: inet_pton for windows php < 5.3
  • Bugfix: GeoIP support for online world map


  • Bugfix: GeoIP functionality


  • New: posts only parameters for [CPD_MOST_VISITED_POSTS]
  • New: don't count password protected posts without password
  • New: translate widget titles if possible
  • New: flags of Cambodia, Nigeria and Sudan
  • Bugfix: massbot post list has not show all post
  • Bugfix: security fix, XSS
  • Bugfix: problems while adding widgets
  • Bugfix: start session only in backend
  • Bugfix: empty database query


  • Bugfix: compatibility fix for WordPress 3.5


  • Bugfix: security fix, check user permissions



  • New: counter column in custom post lists
  • Bugfix: errors in search words
  • Bugfix: wrong counts in posts lists


  • Bugfix: massbot delete error
  • Bugfix: search words array sometimes corrupt
  • Bugfix: add collected data to reads per post, thanks to Suzakura Karin /
  • Language update: Japanese, thanks to Juno Hayami
  • Language update: Portuguese, thanks to Beto Ribeiro
  • Language update: Russian, thanks to Ilya Pshenichny
  • Language update: Bulgarian, thanks to joro


  • New: save search words
  • New shortcode: CPD_COUNTRIES_USERS
  • New: flags for Bahamas, Mongolia, Cameroon and Kazakhstan
  • Bugfix: can't move widgets
  • Bugfix: visitors per post list
  • Bugfix: "Clean Database" deleted collection too
  • Bugfix: browser summary Chrome/Safari fixed
  • Bugfix: get real remote IP address, not local server
  • Bugfix: security fixes
  • Change: create collection functions optimized
  • New language: Romanian, thanks to Alexander Ovsov
  • New language: Hindi, thanks to Love Chandel
  • New language: Finnish, thanks to Jani Alha
  • Language update: Ukrainain, thanks to Iflexion design


  • Bugfix: important fixes in map.php and download.php, thanks to


  • New: memory check before backup to avoid "out of memory" error
  • New: create temporary backup files for download only
  • New: delete backup files in wp-content on settings page
  • Bugfix: all posts shows 1 read in posts list
  • Bugfix: clean database shows 0 entries deleted


  • New: use now default WordPress database functions to be compatible to e.g. multi-db plugins
  • New: backup your counter data
  • New: collect entries of counter table per month and per post to reduce the database and speed up the statistics
  • New: functions and shortcodes [CPD_DAY_MOST_READS] [CPD_DAY_MOST_USERS] to shows days with most reads/visitors
  • New: option to cut referrer on "?" to not store query strings
  • New: parameter $postsonly for getMostVisitedPosts function to list single posts and pages only
  • New: flags for Moldavia and Nepal
  • New language: Norwegian, thanks to Stein Ivar Johnsen and Tore Johnny Bråtveit
  • New language: Azerbaijani, thanks to Bohdan Zograf
  • New language: Japanese, thanks to Juno Hayami
  • Bugfix: visitors per month list
  • Change: some function parameters
  • Change: little memory optimizing
  • Change: visitors currently online and notes will now managed per option, without seperate tables in database
  • Change: design updated
  • Change: old bar charts deleted
created by Readme Parser

RSS-Feed 3.521 Kommentare

Seiten: « 1 2 3 ... 90 91 92 93 94 95 96 ... 144 145 146 »
  1. Hi Tom.
    Just automatically updated to your latest version. All worked fine but for 1 thing.
    I wanted to delete some "Mass Bots" records and got this error message: "Fatal error: Using $this when not in object context in /home/xxx.../count-per-day/counter-options.php on line 102"
    That line reads:
    "$count_per_day-&gt;mysqlQuery('', "DELETE FROM $wpdb-&gt;cpd_counter WHERE ip = $this-&gt;aton('$r-&gt;ip') AND date = '$r-&gt;date'", 'deleteMassbots '.__LINE__);"
    I have reloaded and restarted CPD plugin but cannot correct.
    Please review.
    Regards, Angus

  2. Hi Tom!
    Done and all works 100% again :)
    Regards and thanks, Angus

  3. Andreas Andreas sagt:

    Ich krieg ne weiße Seite, sobald das Plugin aktiviert ist.

  4. Hallo,
    Ich finde dein Plugin klasse!
    Danke für dieses nützliche Plugin!

    Nun habe ich eine Frage:
    Ich habe per Shortcode auf meiner Startseite die beliebtesten Posts der X-Tage drin.
    Nun wird mir dort aber auch die Home-Seite mit aufgeführt, was recht unpraktisch ist und im Grunde die ersten 2 Listeneinträge damit geblockt werden, weil die Home (Ich habe eine permanente Seite als Home und nun wird einmal "Startseite" und die festgelegte Home-Seite auf den ersten beiden Positionen gezeigt) ja immer von den Usern angeklickt wird.
    Kann man irgendwie Seiten von Artikeln filtern?
    Und wie bekomme ich dies als Widget hin? Fände es als Widget nämlich schöner! Oder könnte man für die nächste Version ein solches Widget mit in betracht ziehen?

    LG IceBluemchen

    • Tom Tom sagt:

      Hallo IceBluemchen,
      der Shortcode benutzt momentan Standardwerte.
      Entweder du rufst direkt die Funktion
      getMostVisitedPosts( $days = 0, $limit = 0, $frontend = false, $postsonly = false, $return = false )
      auf oder, was einfacher ist, du änderst die Standardwerte für den Shortcode.
      Such mal in der counter-core.php die Zeile:
      function shortMostVisitedPosts(){ return $this->getMostVisitedPosts(0, 0, true, false, true); }
      und ändere sie in:
      function shortMostVisitedPosts(){ return $this->getMostVisitedPosts(0, 0, true, true, true); }
      Dann sollten nur noch echte Posts erscheinen.
      Ich werde den Shortcode mal um die Parameter erweitern.
      Also Widget könntest du ein Textwidget einsetzen in dem du den Shortcode einträgst.

      • Icebluemchen Icebluemchen sagt:

        Hallo und danke für die schnelle Antwort.
        Ich habe die Änderung in der counter-core.php vorgenommen und es funktioniert soweit ganz gut, wobei dennoch nicht zwischen Seite und Artikel unterschieden wird. Also es werden weiterhin auch Seiten angezeigt. Aber zumindest nicht mehr -Home- was wirklich sehr unschön aussah.
        So wie es jetzt ist, ist es auf jedenfall besser!

        Das mit dem Widget funktioniert irgendwie nicht. Endweder ich bin dafür zu Blond oder vielleicht unterstützt das mein Design auch nicht... keine Ahnung, aber er spuckt mir dort immer nur den Shortcode aus und nicht die Liste. :traurig:
        Oder muss ich dafür evtl. etwas in den header des Design schreiben? Wenn ja, was?
        Aber die Liste schon auf meiner Startseite zu haben, ist auch schon mal was. Besser als gar nicht! :thumbup:

        LG IceBluemchen

        • Tom Tom sagt:

          Seiten und Artikel trenne ich nicht, daher werden beide angezeigt. Jetzt halt nur tatsächliche Posts mit einer ID, keine Übersichten mehr. Das ist also kein Fehler. ;)
          Wenn nur der Shortcode angezeigt wird, füge mal add_filter('widget_text', 'do_shortcode'); in die functions.php deines Themes ein. Besser?

          • Icebluemchen Icebluemchen sagt:

            Hallo, muss erst einmal loswerden, das dies hier ein spitzen Support ist. :thumbsup:
            Habe das mit Artikel und Seite auch nicht wirklich als Fehler angesehen, sondern manche trennen es, andere nicht. Ist aber auch nicht so schlimm, da nur eine Seite angezeigt wird... der Rest ist bei mir alles Artikel.

            Danke, das mit dem Witget funktioniert nun mit der Anpassung im Design.
            Jetzt muss ich die Liste nur noch meinem Design entsprechend anpassen, da er da etwas die Schrift verzeiht.
            Wo im Code des Plugin finde ich dies denn? Habe schon geschaut, aber noch nicht die passende Stelle gefunden, wo das Aussehen definiert ist. Geht dabei eigentlich nur darum, das der einführende Text in <small> ist und die Zählung <b>. Das wollt ich abändern, sodass es in meinem Design besser aussieht.
            Das darf ich doch oder? Also das Aussehen der Liste verändern!

            LG IceBluemchen

            • Tom Tom sagt:

              Danke IceBluemchen, schön dass du es bemerkst. ;)
              Das Design darfst du natürlich anpassen, ist doch deine Seite. Außerdem dürftest du auch das ganze Plugin ändern, wenn du Lust hast. ;)
              Das Design steht in der css-Datei.
              Für das Widget könntest du folgendes probieren und in die style.css deines Themes eintragen.

              #text-3 small {font-size:12px !important}
              #text-3 .cpd_front_list b {font-weight: normal !important}
              #text-3 .cpd_front_list a {display: inline-block; width: 90%}
              ggf. auch ohne !important
              Die letzte Zeile verkürzt die Linkbreite, damit die Zahl nicht nach unten rutscht. Musst mal ein wenig spielen.

  5. alber alber sagt:

    Ciao Tom.

    Aggiornato il plug-in, se cancello i bots mi esce questo errore:

    Fatal error: Using $this when not in object context in /membri/numerico/ALBERCLAUS/wp-content/plugins/count-per-day/counter-options.php on line 102

    Ciao e grazie!


    Hi Tom.

    Updated plug-ins, if I cancel bots I get this error:

    Fatal error: Using $this when not in object context in /membri/numerico/ALBERCLAUS/wp-content/plugins/count-per-day/counter-options.php on line 102

    Hello and thanks!

    • alber alber sagt:

      Ciao Tom.

      Scusami, ho letto ora qualche commento sopra con il mio stesso problema. Ho modificato il codice ed ora funziona. Scusa per il doppio commento. Mitico Tom! :lol:


      Hi Tom.

      Sorry, I read some comments above now with my same problem. I modified the code and it works now. Sorry for the double comment. Legendary Tom! :lol:

  6. pavroo pavroo sagt:

    I am using WP 3.4.1 and CPD 3.2. Having search results I can't open any showed links. I just get message:
    Warning: in_array() expects parameter 2 to be array, string given in /home/.../counter.php on line 152
    Fatal error: Cannot use string offset as an array in /home/.../counter.php on line 153
    Is any chance to fix it, please?

  7. Squareeye Squareeye sagt:


    I can not delete the list and I get this message, what to do. I have 3711 in the list.

    Using $this when not in object context in /home/virtual/ on line 102

    I have sent to you postcard from Stockholm... :-D

  8. Bei uns auf der Seite wird folgender Fehler vom Plugin ausgegeben:

    Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/iscom/public_html/wp-includes/functions.php:2628) in /home/iscom/public_html/wp-content/plugins/count-per-day/counter-core.php on line 176

    Gibt es da eine Erklärung bzw. eine Möglichkeit diesen weg zu bekommen?

    Mit freundlichen Grüßen

    • Tom Tom sagt:

      Die Session wird nur gestartet, wenn noch keine existiert. Es werden aber diverse Fehlermeldungen angezeigt. Diese senden dann bereits die Header was zu der genannten Fehlermeldung führt.
      Schreib mal ini_set('display_errors', 0); in deine wp-config.php um die Fehler nicht anzuzeigen. Natürlich sollten sie auch beseitigt werden.

  9. thlay thlay sagt:

    nach langem suchen und Testen mit anderen Countern habe ich mich für CountperDay entschieden
    **** SPITZE *****
    das einzige, was mir momentan etwas aufstöst ist, das cpd nicht so richtig mit der Permalinkeinstellung
    %postname% zurechtkommt , oder habe ich etwas Falsch ? ansonsten läuft alles prima (WP Version 3.41

    • Tom Tom sagt:

      Mit dem Permalink macht das Plugin gar nichts. Es nutzt nur die Post-ID. Wie äußert sich denn das Problem?

      • thlay thlay sagt:

        Hallo Tom,
        vielen Dank für die angebotene Hilfe !!! (kenne ich So nicht)
        das Problem war nicht CountPerDay sondern ein anderes Plugin für Redirection
        jetzt funktioniert alles Prima
        eine Frage habe ich noch:
        kann man mit dem Shortcut oder der php-funktion nur die views auf einzelne unterseiten abfragen ?
        und wenn ja wie

        • Tom Tom sagt:

          Wenn du [CPD_READS_THIS] auf deine Seiten schreibst, wir an dieser Stelle die Zahl der Seitenaufrufe angezeigt.
          Wenn du das aber für mehrere/alle Seiten haben möchtest, würde ich eher das Widget benutzen. Dort kannst du auch auswählen, welche Zahlen du anzeigen möchtest.

  10. thlay thlay sagt:

    Danke für die schnelle Antwort,

    aber mir ging es eher darum zb auf der page "xyz" die views der pages "abc" und "cdf" anzeigen zu lassen

    ???? gibt es dafür auch eine Möglichkeit


    • Tom Tom sagt:

      Also du willst auf einer spezielle Seite bestimmte Artikel mit Zählerständen angeben?
      Dann müsstest du wohl die Funktion benutzen. Allerdings geht das im Seiteninhalt nur, wenn du ein Plugin installierst, dass PHP-Code im Inhalt zulässt. Halte ich für übertrieben und unsicher.
      Also besser ein neues Template anlegen und die Funktion mehrmals mit unterschiedlichen Post-IDs reinschreiben.

      global $count_per_day;
      if (method_exists($count_per_day,'show'))
        $count_per_day->show( 'davor', 'danach', true, false, 27 );

      Dieser Code würde "davor xx danach" ausgeben, wobei xx die Seitenaufrufe des Artikels mit der ID 27 sind.

Seiten: « 1 2 3 ... 90 91 92 93 94 95 96 ... 144 145 146 »

Kommentar schreiben

Deine E-Mail-Adresse wird nicht veröffentlicht.

:mrgreen:  :D  :)  ;)  8-)  :O  :cry:  :(  :liebhab:  :-x  :-?  :P  :roll:  :arrow:  :schwitz:  :thumbsup:  :thumbup:  :thumbdown:  :facepalm:  :?:  :!:  :eis: