WordPress.com classic stats

Redirects the new stats page to the classic stats page

As of 2017-06-15. See the latest version.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        WordPress.com classic stats
// @namespace   tpenguinltg
// @description Redirects the new stats page to the classic stats page
// @include     https://wordpress.com/stats*
// @version     2.2.0
// @homepageURL https://greasyfork.org/en/scripts/8621-wordpress-com-classic-stats
// @homepageURL https://github.com/tpenguinltg/wpcom-stats-redirect.user.js
// @grant       none
// @license     MPLv2.0; http://mozilla.org/MPL/2.0/
// @copyright   2015-2016, tPenguinLTG (http://tpenguinltg.wordpress.com/)
// @run-at      document-start
// ==/UserScript==

// Function by dystroy. From http://stackoverflow.com/a/14388512
function fetchJSONFile(path, callback, fallback) {
  var httpRequest = new XMLHttpRequest();
  httpRequest.onreadystatechange = function() {
    if (httpRequest.readyState === 4) {
      if (httpRequest.status === 200) {
        if (callback) callback(JSON.parse(httpRequest.responseText));
      } else if (fallback) {
        fallback();
      }
    }
  };
  httpRequest.open('GET', path);
  httpRequest.send();
}

function redirectToClassicStats(baseUrl, statsType) {
  var query = ["page=stats"];

  switch (statsType) {
    case "day":
      query.push("unit=1");
      break;
    case "week":
      query.push("unit=7");
      break;
    case "month":
      query.push("unit=31");
      break;
  }

  window.location.replace(baseUrl + '/wp-admin/index.php?' + query.join("&"));
}

function doRedirect(uri) {
  var parsedUri = uri.match(/stats(?:\/(insights|day|week|month|year))?(?:\/(countryviews|posts))?(?:\/([^\/]*))?/);
  var statsType = parsedUri[1];
  var viewType = parsedUri[2];
  var blogDomain = parsedUri[3];

  if (blogDomain) {
    // Redirect to post URL based on API results
    // API docs: https://developer.wordpress.com/docs/api/
    fetchJSONFile("https://public-api.wordpress.com/rest/v1.1/sites/" + blogDomain,
      // attempt to redirect using API
      function(data) {
        redirectToClassicStats(data.URL, statsType);
      },

      // fallback: attempt to use the blog domain
      function() {
        // use http instead of https in case the server doesn't support https
        // (e.g. for Jetpack sites)
        redirectToClassicStats('http://' + blogDomain, statsType);
      }
    );
  } else if (statsType != "insights") {
    window.onload = function() {
      // construct a stats URI from the user's default blog
      var defaultBlogStatsUri = "/stats";
      if (statsType) defaultBlogStatsUri += "/" + statsType;
      defaultBlogStatsUri += "/" + currentUser.primarySiteSlug;
      doRedirect(defaultBlogStatsUri);
    };
  } else {
    window.onload = function() {
      // construct an insights URI from the user's default blog
      doRedirect("/stats/insights/" + currentUser.primarySiteSlug);
    };
  }
}

// redirect unless new stats is explicitly requested
if (!window.location.search.contains("from=wp-admin")) {
  doRedirect(window.location.pathname);
}