このサイトでも使わせてもらってるWordPress用PluginのCounterize II。
アクセスカウンタに加えて簡易アクセス解析も付いた便利なプラグインだ。
エラーが発生したのは、検索エンジン経由でRefererにキーワードが含まれるとき。
しかも、マルチバイト文字が含まれるときに限られることが分かった。
ページは表示されるものの、ページ上部にWordPressのエラー表示が出てしまうのでかっこ悪い。
関係するのは、
- wp_Counterize
- wp_Counterize_Keywords
- wp_Counterize_Pages
- wp_Counterize_Referers
- wp_Counterize_UserAgents
と4つあるテーブル(接頭辞は環境によって違う)の、うち Counterize_Keywords だ。
原因はこのテーブルのnameフィールドの照合順序がlatin1_swedish_ciになっていたこと。
ページ表示の際に新規キーワードか既存キーワードか判断して、カウントアップ(Update)するか、新しいレコードを作製(Insert)するかを判断する部分、
$sql = “SELECT keywordID from “.counterize_keywordTable().” where keyword = ‘”.$wpdb->escape($ref[‘keyword’]).”‘”;
このクエリのwhere句でlatin1_swedish_ciとutf8_general_ciが混じっているのがMySQL的に嫌だったらしくエラーになっていた。
該当フィールドをutf8_general_ciに変更して修正完了。
海外製プラグインでは良くあることなので気をつけていたはずなのに、、、
phpMyAdminで修正。念のため関連テーブルも全て変更。
wp_Counterize_Keywordsには”???”とかのゴミが溜まっていたので、適当に削除。
一応wp_Counterize_ReferersのkeywordIDフィールドと関連あるっぽいけど、Joinしているようなクエリは見当たらなかったので、あんまり深く考えずざっくり削除。
まあ動いてるし大丈夫っしょ。
ちなみに気づいたきっかけは、嫁が会社から “and i love you アニキ” というキーワードでblog検索した結果から飛んできたときにエラーになったってことを教えてくれたから。
アニキて。いや、書いたけどさ。。
このページで頂いたコメントもこのことだったのかもしれず。タイトル日本語だし。
いやぁ、スッキリ!
自分はWPにログインしっぱなしで、自分のIDはカウントしない設定になっていたんで、発見が遅れますた。
ちなみに、このサイトでは右側のWidgetに「過去の累計」「本日のアクセス数」「昨日のアクセス数」「アクセス中のURIへのアクセス数」の4つのカウンタを表示している。
それぞれ、
- counterize_getamount() トータル
- counterize_gethitstoday() 本日
- counterize_gethitsyesterday() 昨日 (標準では用意されていないのでgethitstodayを参考に作成)
- counterize_getHitsOnCurrentArticle() アクセス中のURIへのアクセス数
使える関数はFunctions ≫ Blog der Microsoft .NET / Dynamics NAV – Group Halle で紹介されている。
けど、counterize_getHitsOnCurrentArticle() は書いてない??
1回のページ表示で select count(1) from wp_Counterize where hoge みたいなSQLを毎回実行するのは非効率だなぁ、と思いながら。
重さが気になったら何か考えることにする。
コメント