Title: [Plugin: WP SlimStat] HOW TO
Last modified: August 19, 2016

---

# [Plugin: WP SlimStat] HOW TO

 *  Plugin Contributor [Jason Crouse](https://wordpress.org/support/users/coolmann/)
 * (@coolmann)
 * [15 years, 2 months ago](https://wordpress.org/support/topic/plugin-wp-slimstat-how-to/)
 * Create your own custom reports
 * Getting Started
    WP SlimStat 2 allows you to add your own custom reports to its
   panels. You will need to write a plugin that retrieves the information from WP
   SlimStat tables and displays it using the format described here below. A demo
   plugin is included within the package: take a look at its source code (which 
   I tried to keep as simple as possible) and then cut loose your imagination!
 * Write your own (sub)plugin
    In order to add a new report, design and test (with
   tools like phpmyadmin) your SQL query. Something like: Code: [Select] SELECT `
   resource`, COUNT(*) count FROM `$this->table_stats` WHERE `resource` <> ” GROUP
   BY `resource` ORDER BY count DESC LIMIT 0,20
 * This query will be wrapped by some PHP code:
    Code: [Select] private function
   _get_top_pages(){ global $wpdb;
 *  $sql = “SELECT `resource`, COUNT(*) count
    FROM `$this->table_stats` WHERE `
   resource` <> ” GROUP BY `resource` ORDER BY count DESC LIMIT 0,20″;
 *  return $wpdb->get_results($sql, ARRAY_A);
    }
 * As you can see, I used classes and methods, instead of plain functions. This 
   makes your life easier if you want to avoid conflicts with existing functions.
   If you want, you can use regular functions (just remove that private from the
   code here above). Ok, now that you have your data, another function will display
   it:
    Code: [Select] public function show_top_pages() { $results = $this->_get_top_pages();
 *  // Boxes come in three sizes: wide, medium, normal (default).
    // Just add the
   corresponding class (wide, medium) to the wrapper DIV (see here below) echo ‘
   <div class=”metabox-holder medium”><div class=”postbox”>’; echo ‘<h3>’.__( ‘Title
   of your custom report’, ‘wp-slimstat-view’ ).'</h3>’;
 *  echo ‘<div class=”container”>’;
    foreach($results as $a_result){ echo “<p><span
   class=’element-title’>{$a_result[‘resource’]}</span> <span>{$a_result[‘count’]}
   </span></p>”; } echo ‘</div></div></div>’;
 *  }
 * Each row is a paragraph (P tag), that can be divided into two or more columns.
   The first column has to be delimited by a <span class=”left”> tag, while all 
   the other columns need a <span> tag around the data. I could’ve used tables, 
   but this makes your life much easier, I think. The CSS supports also Right-to-
   Left text, if you want your custom reports to have this feature, check the stylesheets
   for further details.
 * Hook your report to WP SlimStat
    Ok, we’re almost done. Now that you have your
   function to display your metrics, just hook it to WP SlimStat: Code: [Select]
   add_action(‘wp_slimstat_custom_report’, ‘show_top_pages’);
 * In case you decide to use classes and methods, you will have to instantiate your
   class and then pass it to add_action. Take a look at the source code of my demo
   plugin for further details about it.
 * Database Schema
    In an effort to optimize the database size, the information 
   about visits and pageviews is stored in 4 different tables (plus the geoip table).
   There are two lookup tables (dictionaries), one for browsers, the other about
   screen resolutions. One table stores session identifications carried by the visitor’s
   cookie, to track visitors. The main table, wp_slim_stats, then references the
   appropriate information using foreign keys.
 * Code: [Select]
    TABLE `wp_slim_stats` ( `id` INT UNSIGNED NOT NULL auto_increment,`
   ip` INT UNSIGNED DEFAULT 0, `language` VARCHAR(5) DEFAULT ”, `country` VARCHAR(
   2) DEFAULT ”, `domain` VARCHAR(255) DEFAULT ”, `referer` VARCHAR(255) DEFAULT”,`
   searchterms` VARCHAR(255) DEFAULT ”, `resource` VARCHAR(255) DEFAULT ”, `browser_id`
   SMALLINT UNSIGNED DEFAULT 0, `screenres_id` SMALLINT UNSIGNED DEFAULT 0, `plugins`
   VARCHAR(255) DEFAULT ”, `visit_id` INT UNSIGNED DEFAULT 0, `dt` INT(10) UNSIGNED
   DEFAULT 0,
 *  PRIMARY KEY `id` (`id`),
    FOREIGN KEY (`browser_id`) REFERENCES `$this->table_browsers`
   ON DELETE RESTRICT, FOREIGN KEY (`screenres_id`) REFERENCES `$this->table_screenres`
   ON DELETE RESTRICT, FOREIGN KEY (`visit_id`) REFERENCES `$this->table_visits`
   ON DELETE RESTRICT )
 * LOOKUP TABLE `wp_slim_countries` (
    `ip_from` INT UNSIGNED DEFAULT 0, `ip_to`
   INT UNSIGNED DEFAULT 0, `country_code` CHAR(2) DEFAULT ”,
 *  KEY `ip_from_idx` (`ip_from`,`ip_to`)
    )
 * LOOKUP TABLE `wp_slim_browsers` (
    `browser_id` SMALLINT UNSIGNED NOT NULL auto_increment,`
   browser` VARCHAR(40) DEFAULT ”, `version` VARCHAR(15) DEFAULT ”, `platform` VARCHAR(
   15) DEFAULT ”, `css_version` VARCHAR(5) DEFAULT ”,
 *  PRIMARY KEY `browser_id` (`browser_id`)
    )
 * LOOKUP TABLE `wp_slim_screenres` (
    `screenres_id` SMALLINT UNSIGNED NOT NULL
   auto_increment, `resolution` VARCHAR(12) DEFAULT ”, `colordepth` VARCHAR(5) DEFAULT”,`
   antialias` BOOL DEFAULT FALSE,
 *  PRIMARY KEY `screenres_id` (`screenres_id`)
    )
 * TABLE `wp_slim_visits` (
    `visit_id` INT UNSIGNED NOT NULL auto_increment, `tracking_code`
   VARCHAR(255) DEFAULT ”,
 *  PRIMARY KEY `visit_id` (`visit_id`)
    )
 * TABLE `wp_slim_outbound` (
    `outbound_id` INT UNSIGNED NOT NULL auto_increment,`
   outbound_domain` VARCHAR(255) DEFAULT ”, `outbound_resource` VARCHAR(255) DEFAULT”,`
   type` TINYINT UNSIGNED DEFAULT 0, `id` INT UNSIGNED NOT NULL DEFAULT 0, `dt` 
   INT(10) UNSIGNED DEFAULT 0, PRIMARY KEY (`outbound_id`) )
 * Display metrics in your template
 * Getting Started
    WP SlimStat 2 allows you to display its reports on your website.
   Including filters! You will need to edit your template and add something like
   this where you want your metrics to appear:
 * Code: [Select]
    // Load WP SlimStat VIEW, the library with all the metrics require_once(
   WP_PLUGIN_DIR.’/wp-slimstat/view/wp-slimstat-view.php’);
 * // Define a filter: I want to show only hits by people who where using Firefox,
   any version
    $filters = array(‘browser’ => ‘Firefox’, ‘browser-op’ => ‘contains’);
 * // Instantiate a new copy of that class
    $wp_slimstat_view = new wp_slimstat_view(
   $filters);
 * // Use the appropriate method to display your stats
    echo $wp_slimstat_view->
   count_raw_data();
 * If you want to use one of the methods that return a list (array) of elements,
   please inspect the structure of the array or post a message on this forum if 
   you need more information about how to use it.
 * Available methods
    count_all_visitors() — number of hits by human visitors count_bots()—
   number of bots count_direct_visits() — number of direct visits count_exit_pages()—
   number of exit pages count_new_visitors() — number of new visitors count_pages_referred()—
   number of pages referred from an external source count_plugin($plugin_name) —
   number of hits where the user had this plugin enabled count_raw_data() — number
   of pageviews recorded by WP SlimStat count_recent_404_pages() — number of 404
   pages for the current month count_recent_browsers() — number of distinct browsers
   count_referred_from_internal() — number of pages referred from an internal source
   count_referers() — number of referring sources (pages pointing to your site) 
   count_search_engines() — number of hits having a search engine as a source count_total_pageviews()—
   number of total hits count_unique_ips() — number of different IP’s used by visitors
   count_unique_referers() — number of unique sources get_browsers() — list of browsers
   by hits get_data_size() — DB data size in kilobyte or megabyte get_details_recent_visits()—
   list (detailed) of recent visits get_max_and_average_pages_per_visit() — object
   with two variables: avg and max pages per visit get_other_referers() — list of
   referrers that are not a search engine get_raw_data() — list (detailed) of last
   50 hits get_recent_404_pages() — list of the most recent 404 pages get_recent_bouncing_pages()—
   list of the most recent ‘bounce’ pages get_recent_browsers() — list of the most
   recent browsers get_recent_downloads() — list of the most recent downloaded files(
   requires extra javascript) get_recent_internal_searches() — list of the most 
   recent internal search strings get_recent_keywords_pages() — list of the most
   recent search keywords and the corresponding landing page get_recent_outbound()—
   list of the most recent exit pages get_top_browsers_by_operating_system() — list
   of the top browsers, grouped by OS get_top_exit_pages() — list of the top exit
   pages get_top_operating_systems() — list of the top operating systems get_top_screenres()—
   list of the top screen resolutions get_top_search_engines() — list of the top
   search engines (sources)
 * Filters
    Defining filters is as easy as creating a new array in PHP. Just specify
   the name of the filter you want to use, the corresponding value, and what kind
   of filter you want to use (exact match, contains, does not contain, etc).
 * Available filters:
    day month year interval – how many days from the start date
   you want to consider browser version (of the browser) css_version country domain(
   of the referring page) ip language platform (operating system) resource (permalink)
   referer (path of the referring page) resolution (of your visitors’ screens) searchterms
   limit_results
 * Filters types, specified adding the suffix -op to your filter’s name:
    contains
   does not contain starts with ends with equals (default option)
 * Example:
 * $filters = array(‘platform’ => ‘win’, ‘platform-op’ => ‘does not contain’, ‘limit_results’
   => ‘5’, ‘limit_results-op’ => ‘equals’);
 * Display stats in your text widgets, posts and pages
    I decided to write a separate
   plugin to do this. This way only people who really need this feature, will have
   to add it to their box, while others will continue enjoying a lightweight and
   fast statistics plugin. So, the first step is to install WP SlimStat Shortcodes(
   and WP SlimStat, of course). Once you activate it, the following shortcodes will
   be available for you:
 * <!–slimstat:count_all_visitors–> — number of hits by human visitors
    <!–slimstat:
   count_bots–> — number of bots <!–slimstat:count_direct_visits–> — number of direct
   visits <!–slimstat:count_exit_pages–> — number of exit pages <!–slimstat:count_new_visitors–
   > — number of new visitors <!–slimstat:count_pages_referred–> — number of pages
   referred from an external source <!–slimstat:count_raw_data–> — number of pageviews
   recorded by WP SlimStat <!–slimstat:count_recent_404_pages–> — number of 404 
   pages for the current month <!–slimstat:count_recent_browsers–> — number of distinct
   browsers <!–slimstat:count_referred_from_internal–> — number of pages referred
   from an internal source <!–slimstat:count_referers–> — number of referring sources(
   pages pointing to your site) <!–slimstat:count_search_engines–> — number of hits
   having a search engine as a source <!–slimstat:count_total_pageviews–> — number
   of total hits <!–slimstat:count_unique_ips–> — number of different IP’s used 
   by visitors <!–slimstat:count_unique_referers–> — number of unique sources <!–
   slimstat:get_browsers–> — list of browsers by hits <!–slimstat:get_data_size–
   > — DB data size in kilobyte or megabyte <!–slimstat:get_details_recent_visits–
   > — list (detailed) of recent visits <!–slimstat:get_other_referers–> — list 
   of referrers that are not a search engine <!–slimstat:get_raw_data–> — list (
   detailed) of last 50 hits <!–slimstat:get_recent_404_pages–> — list of the most
   recent 404 pages <!–slimstat:get_recent_bouncing_pages–> — list of the most recent‘
   bounce’ pages <!–slimstat:get_recent_browsers–> — list of the most recent browsers
   <!–slimstat:get_recent_downloads–> — list of the most recent downloaded files(
   requires extra javascript) <!–slimstat:get_recent_internal_searches–> — list 
   of the most recent internal search strings <!–slimstat:get_recent_keywords_pages–
   > — list of the most recent search keywords and the corresponding landing page
   <!–slimstat:get_recent_outbound–> — list of the most recent exit pages <!–slimstat:
   get_top_browsers_by_operating_system–> — list of the top browsers, grouped by
   OS <!–slimstat:get_top_exit_pages–> — list of the top exit pages <!–slimstat:
   get_top_operating_systems–> — list of the top operating systems <!–slimstat:get_top_screenres–
   > — list of the top screen resolutions <!–slimstat:get_top_search_engines–> —
   list of the top search engines (sources)
 * Just paste the corresponding shortcode into your HTML editor (be sure to use 
   the source code view, not the WYSIWYG mode) and you’re pretty much done. You 
   can filter results based on different parameters (see Display metrics in your
   template). Define as many filters as you want, adding the following shortcode(
   s) in your post:
 * <!–slimstat-filter:browser:contains:fox–>
 * Some tags return a list of elements (see items marked as list here above): don’t
   forget to wrap your shortcode around a
    -  tag:
 * <ul class=”use-whatever-you-like-here”><!–slimstat:get_top_screenres–>
 * Please do not hesitate to post a message on this forum if you have any questions
   about these shortcodes.
 * Avoid conflicts with Ligthbox and friends
 * Sergio sent me a message a few weeks ago to point out that he had noticed a “
   conflict” between WP SlimStat and Lightbox: after clicking on the thumbnail, 
   the bigger image would show up not inside the ‘nice’ popup window as expected,
   but alone in a new page. After further investigation, I found out that the way
   my plugin tracks external/outbound links is incompatible with the way Lightbox
   works. Unfortunately, the current version of Javascript doesn’t allow me to detect
   if a specific link is being “managed” by Lightbox, so here’s the workaround.
 * Let’s say you have a link associated to Lightbox (or one of its hundreds flavors):
 * [Open Image in LightBox](https://wordpress.org/wp-slimstat?output_format=md)
 * To tell WP SlimStat to adjust its behavior, change it to:
 * [Open Image in LightBox](https://wordpress.org/wp-slimstat?output_format=md)
 * This will allow my plugin to still track the click on that resource, but to avoid
   any conflicts with third party Javascript codes.
 * Track downloaded files and other actions
    WP SlimStat can track outbound links(
   clicks on links taking users to other websites), downloads and other events. 
   Outbound links are automatically tracked, once you activate the corresponding
   option (Enable JS Tracking) in your admin panel. In order to explicitly track
   downloads, you need to change your link from Code: [Select] [Download this cool file](https://wordpress.org/path/to/my/download.zip?output_format=md)
   to Code: [Select] [Download this cool file](https://wordpress.org/path/to/my/download.zip?output_format=md)
   Please make sure to use exactly this syntax when modifying your links.
 * [http://wordpress.org/extend/plugins/wp-slimstat/](http://wordpress.org/extend/plugins/wp-slimstat/)

The topic ‘[Plugin: WP SlimStat] HOW TO’ is closed to new replies.

 * ![](https://ps.w.org/wp-slimstat/assets/icon.svg?rev=2832242)
 * [SlimStat Analytics](https://wordpress.org/plugins/wp-slimstat/)
 * [Frequently Asked Questions](https://wordpress.org/plugins/wp-slimstat/#faq)
 * [Support Threads](https://wordpress.org/support/plugin/wp-slimstat/)
 * [Active Topics](https://wordpress.org/support/plugin/wp-slimstat/active/)
 * [Unresolved Topics](https://wordpress.org/support/plugin/wp-slimstat/unresolved/)
 * [Reviews](https://wordpress.org/support/plugin/wp-slimstat/reviews/)

 * 0 replies
 * 1 participant
 * Last reply from: [Jason Crouse](https://wordpress.org/support/users/coolmann/)
 * Last activity: [15 years, 2 months ago](https://wordpress.org/support/topic/plugin-wp-slimstat-how-to/)
 * Status: not a support question