ここは、技術情報、身の回りに起こった出来事を、「もしかしたらみんなの役に立つかもしれない」と思って書き留めておく場所です。

Image

WordPressプラグインStat Press Reloadedのカスタマイズ

2012年9月25日
 

最初は、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 '';ならばログ不要パターンとなります。

誰かのアクセスを拒否したい方は真似してみてください。

ということで、簡単な奴だけ書いてみました。