[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]
SELECTresource
, COUNT(*) count
FROM$this->table_stats
WHEREresource
<> ”
GROUP BYresource
ORDER BY count DESC
LIMIT 0,20This 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
WHEREresource
<> ”
GROUP BYresource
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]
TABLEwp_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_resultsFilters 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):
To tell WP SlimStat to adjust its behavior, change it to:
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
to
Code: [Select]
Download this cool file
Please make sure to use exactly this syntax when modifying your links.
- The topic ‘[Plugin: WP SlimStat] HOW TO’ is closed to new replies.