Do you want to count access statistics for anonymous visitors only? Do you want to reset access statistics for unpublished articles?
I'm assuming you're using the Drupal 7 statistics module.
Instead of copying the whole statistics module and changing it, there's a simple trick: Undo the +1 of registered users by an -1. Thus, the increase of the statistics module is compensated.
<?php
/**
* Implements hook_exit().
*
* Compensate access statistics of registered users with -1.
* See statistics_exit().
*/
function YOUR_MODULE_exit() {
global $user;
// When serving cached pages with the 'page_cache_without_database'
// configuration, system variables need to be loaded. This is a major
// performance decrease for non-database page caches, but with Statistics
// module, it is likely to also have 'statistics_enable_access_log' enabled,
// in which case we need to bootstrap to the session phase anyway.
drupal_bootstrap(DRUPAL_BOOTSTRAP_VARIABLES);
if (variable_get('statistics_count_content_views', 0)) {
// We are counting content views.
if ($user->uid != 0 && arg(0) == 'node' && is_numeric(arg(1)) && arg(2) == NULL) {
// A node has been viewed, so update the node's counters.
db_merge('node_counter')
->key(array('nid' => arg(1)))
->fields(array(
'daycount' => 1,
'totalcount' => 1,
'timestamp' => REQUEST_TIME,
))
->expression('daycount', 'GREATEST(daycount, 1) - 1')
->expression('totalcount', 'GREATEST(totalcount, 1) - 1')
->execute();
}
}
}
?>
Additionally, it's possible to reset node access statistics of unpublished articles with each cron run.
<?php
/**
* Reset counts of unpublished nodes.
* Implements hook_cron().
*/
function YOUR_MODULE_cron() {
if (variable_get('statistics_count_content_views', 0)) {
// Reset counts of unpublished nodes.
$unpblished = db_select('node', 'n')
->condition('n.status', 0, '=')
->fields('n', array('nid'));
db_update('node_counter')
->fields(array('daycount' => 0, 'totalcount' => 0))
->condition('nid', $unpblished, 'IN')
->execute();
watchdog('ibexutils', 'Reset counts of unpublished nodes.', array());
}
}
?>