なんだか、いじってない WordPress ナンバーワンサイトみたいだった ここ hiromasa.another ですが、さすがにちょっといじることに。 なにを隠そう、先日までスパム対策もノーガード戦法にしていたので、とあるエントリには 100くらいのスパムが付いていたり・・・。 🙂
まぁまぁ、なんでもスモールスタートが好みなんです。
でサイドバーに本日人気の記事、 todays popular をだしたかったので、bsuite を入れてみることにしました。
bSuite includes a set of tools (some in seperate plugins) that improve WordPress’ tag management and CMS capabilities, make it easier to build dynamic pages, and leverage WP as an application platform. Plugins that can be activated seperately include one for stats tracking (bSuite bStat), a tag importer, and an example plugin that illustrates how to leverage one of the features bSuite adds to WordPress.
日本語系の情報は、Masayan さんのところが詳しいです。
bsuite タグのアーカイブ
はたして、せっかくなので最新版などいれてみるも、?。 なんか変わった。。 いろいろな機能をまとめて bsuite になっているようですね。 とりあえず、bsuite と bstat を有効化。 これで、todays popular はできるはず・・・。
ローカルでちょいちょいためして、、あれ、管理画面がなくなった? などと思いつつ。
<?php bstat_todaypop(6, '<li>', '</li>'); ?>
と todays popular なタグをテーマに挿入。 あれ、自分のクリックもカウントされちゃうな、、ってことでいんちきハックを追加。 昔は設定があったような・・・。 考えるより産むが易し。
bstat.php: 74 行目くらい
function hitit(&$content){
// nonce this
if($this->ktnxbye)
return($content);
// ログインしてたらカウントしない
if(!empty($_COOKIE[USER_COOKIE]))
return($content);
ローカルで動作確認して、 .another で動かしてみる。
[tegaki]表示されね~[/tegaki]
DB をみると、カウント自体はされていて、 bsuite のテンプレートタグがうまく条件を拾ってきてくれないために、null が返る様子。。 ローカルで動いていたのに、なぜ。
ってことで、疑うわ MySQL のバージョン。
ローカル: サーバのバージョン: 5.0.37
コアサバ: サーバのバージョン: 5.1.20-beta
なぜ bate!! ってのはおいておくとして、マイナーバージョンが 1 違うようなので、おそらくこの辺が原因。
プログラムを追っていくと、悪の根源っぽいものを発見。 SQL をくずして抜粋。
SELECT
post_id, SUM(hit_count) AS hit_count
FROM
$this->hits_table
WHERE
1=1 AND
post_id <> 0 AND
hit_date = NOW()
GROUP BY
post_id
ORDER BY
hit_count DESC;
NOW()、今!。
hit_date = NOW()
今といえば、今一瞬しかないのでは。。 テーブルの日付桁みて動くのだろうか。。 たしかに、カラム自体は yyyymmdd までしかないようだ。 NOW() ってやったらミリ秒くらいまではいくような。
まー MySQL が詳しくないぼくはふかく追求せず、
248: $args = wp_parse_args( $args, $defaults );
249:
250: $nownow = date("Y-m-d", mktime(0, 0, 0, date("m") , date("d") , date("Y")));
251: $date = "AND hit_date = '$nownow'";
$nownow とかいいかげんなのは気にしない。 今日の日付を yyyy-mm-dd 形式で検索条件にすることで、期待する動作になりました。
めでたしめでたし。 🙂
追記。 テンプレートタグの limit 引数が効かない。 以下の修正でよいと思われる。
288: $limit = 'LIMIT '. (0 + $args['limit']);
以上、bSuite bStat 3.02 で確認でした。