さて、初のドキドキ(?)連載企画「足おと自動取得プラグイン」の第2回です。いや~~~~、もうほとほと簡単でした(^O^)
プラグイン名は、FootStepに決定!

すでに右ペインに「足おと」を表示しています。

処理は referer に wp-admin を含む場合のみ、”wp-admin”以降を除去した文字列をURLとして配列で返却するだけのプラグインです。
*refererが正しい前提なら、それ以外も取得できますが、
 ダッシュボードからの「足おと」にこだわります。

当然ですが「アクセスカウンタ用のプラグインCounterize」がアクティブになっていることが前提です。
同プラグインのバージョンアップを考慮するとブランチさせないほうが良いので、
あくまでも別プラグイン(といっても on Counterize)として作成する。

手順は、footstep.php などとして、例によって wp-content/plugins に保存して有効化してください。
次に wp-content/themes/テーマ名/sidebar.php などで、足おとを取得して表示するだけです。

以下、対象のテーブル名が wp_Counterize の場合になります。

◆sidebar.php などへの加筆

$referers = counterize_getuniquereferers_array();
$output = “”;
foreach( $referers as $url ) {
$output .= ‘<a href=”‘ . $url . ‘” target=”_blank” style=”font-size: 8px; line-heigh: 1em;”>’ . $url . “</a><br />”;
}

echo ‘<li><h2>’ . mb_convert_encoding(‘足おと’, ‘UTF-8’, ‘AUTO’) . ‘</h2>’;
echo ‘<ul>’;
echo $output;
echo ‘</ul>’;
echo ‘</li>’;

◆footstep.php

<?php
/*
Plugin Name: FootStep on Counterize
Plugin URI: http://typista.dip.jp/
Description: Simple counter-plugin with no external libs – saves IP, timestamp, visited URl, referring URl and browserinformation in database, and can display total hits, unique hits and other statistics in WordPress webpages. Admin-interface available with detailed information…
Version: 0.01
Author: Makoto Kizuka
Author URI: http://typista.dip.jp/
*/

/*
New in 0.01
– It’s first create.
*/

# Returns amount of unique referer-URl’s
function counterize_getuniquereferers_values()
{
$sql = ‘SELECT DISTINCT referer FROM wp_Counterize’;
$sql = sprintf($sql, $GLOBALS[‘table_prefix’]);
$wpdb =& $GLOBALS[‘wpdb’];
return $wpdb->get_results($sql, ARRAY_A);
}
# Returns amount of unique referer-URl’s array.
function counterize_getuniquereferers_array()
{
$referers = counterize_getuniquereferers_values();
$output = array();
foreach( $referers as $rs ) {
if( is_array( $rs ) ) {
foreach( $rs as $r ) {
$url = $r;
}
} else {
$url = $rs;
}
if( isNGWord( $url ) != true ) {
if( strstr( $url, “wp-admin” ) ) {
$wp_admin = strpos( $url, “wp-admin” );
$output[] = substr( $url, 0, $wp_admin );
}
}
}

return $output;
}
$ngword = array();
$ngword[] = “http://typista.dip.jp”;
$ngword[] = “http://mixi.jp”;
$ngword[] = “unknown”;
$GLOBALS[‘ngword’] = $ngword;
function isNGWord( $word ) {
$ngword = $GLOBALS[‘ngword’];
foreach( $ngword as $nw ) {
if( strstr( $word, $nw ) ) {
return true;
}
}
return false;
}
?>

さて、次の第3回ですが、やはりディテールを変えることにしました。
案2は、今回の実装をテキスト出力するシェルに変更し、cronで一定間隔実行します。
これによって毎回DB読み出しの場合と、テキスト読み出しの場合とを最終回でパフォーマンス比較してみようかと。
#詳しい人にとってみればどちらが早いかなんて自明なんでしょうけども、
#MySQLチューニングが有効でなかったようにプアな環境では常識が
#ひっくり返る(通用しない)こともあるので、まずは検証々々。