WordPressプラグインStat Press Reloadedのカスタマイズ
最初は、WordPress Popular Postsプラグインを入れ、アクセス解析は別の方法で見ていました。
ですが、リアルタイムでアクセス解析結果が見たい!ということで、WordPress Popular Postsを外し、アクセス解析プラグインStat Press Reloadedを入れました。
そして、日本語化もしました。
ここでは、その後の簡単なカスタマイズを紹介していきます。
※2012/9/25現在のStat Press Reloaded 1.5.21を元にしています。
その1 ログインユーザーのアクセスを集計しない
これは、ソース修正ではなく、ソース確認です。
日本語翻訳のミスだと思われます。
statpress.php 1779行目のif文が「ログインしてない or オプションの項目がcheckedなら集計する」になってますので。 ログインユーザを集計したくなかったら、ややこしいですが、オプションの「ログインユーザを集計しない」のチェックを外しましょう。
if ((!is_user_logged_in()) or (get_option('statpress_collectloggeduser') == 'checked'))
{
if ($wpdb->get_var("SHOW TABLES LIKE '$table_name'") != $table_name)
{
iri_StatPress_CreateTable();
}
※下のif文は、「テーブルがあるかどうか」をアクセスの度にチェックしてるので、コメント化した方がいいです。
その2 画像までカウントされる場合がある
FancyBox for WordPressのせいかもしれませんが、画像へのアクセスがアクセス解析にカウントされるので、集計から除きます。
statpress.php 1719行目からの修正になります。
PHPのeregi()がPHP 5.3.0 から 非推奨らしいので、全てコメント化しpreg_matchに置き換えます。
さらに画像の拡張子の条件を増やします。
// URL (requested)
$urlRequested = iri_StatPress_URL();
/* 消すよ if (eregi(".ico$", $urlRequested))
{
return '';
}
if (eregi("favicon.ico", $urlRequested))
{
return '';
}
if (eregi(".css$", $urlRequested))
{
return '';
}
if (eregi(".js$", $urlRequested))
{
return '';
}*/
// 追加
if (
preg_match('/favicon\.ico/i', $urlRequested) ||
preg_match('/\.css$|\.ico$|\.js$|\.png$|\.jpg$|\.gif$/i', $urlRequested)
)
{
return '';
}
その3 管理画面の直近の状況がIPアドレスで分かりにくい
本来、DB書き込み前にホスト名に変換しているのですが、DBには返還後の値は格納していませんので、管理画面表示時にもう一度IPアドレス→ホスト名の変換を行います。
statpress.php 727行目を以下のように修正します。
print "<td>" . gethostbyaddr($fivesdraft->ip) . "</td>";
この修正で以下のようにホスト名が表示されます。
その4 個別ログ拒否・アクセス拒否
アクセス解析を見ると、怪しげなサイトからアクセスが来たりしています。
その場合、「ログ不要」パターンと「アクセス拒否」パターンにしたいところです。
標準の機能として、IPアドレスをdef/banipsファイルに書いておけばログを取らないように出来ます。
ですが、アクセス自体を拒否したい場合は、以下のようにします
$referrer = (isset($_SERVER['HTTP_REFERER']) ? htmlentities($_SERVER['HTTP_REFERER']) : '');
// 以下追加
if (strpos($referrer, 'www.sitedossier.com') !== false)
{
exit();
}
このソースの例ではstatpress.php 1744行目のHTTP_REFERERを取得した直後に、$referrerに"www.sitedossier.com"が含まれていたら(www.sitedossier.comから来ているアクセスだったら)アクセスを拒否しています。
exit();してるので何も返さないはずです。
exit();ではなく、return '';ならばログ不要パターンとなります。
誰かのアクセスを拒否したい方は真似してみてください。
ということで、簡単な奴だけ書いてみました。