WordPress.org

Ready to get started?Download WordPress

Forums

WP Slimstat
[Plugin: WP SlimStat] HOW TO (1 post)

  1. camu
    Member
    Plugin Author

    Posted 3 years ago #

    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

    To tell WP SlimStat to adjust its behavior, change it to:

    Open Image in LightBox

    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.

    http://wordpress.org/extend/plugins/wp-slimstat/

Topic Closed

This topic has been closed to new replies.

About this Plugin

About this Topic