こんにちは
色々書いてますが、アクセスカウンターをブログに付けるのに四苦八苦しました。
サーバ負荷と表示速度を早くするのに、キャッシュ機能を使ってますが、アクセスカウンターの表示と、Webキャッシュの相性の悪いこと。。。そりゃそうかとは思うんですが、中々大変でした。(^_^;
最近気づいた事があります。このブログはWordpressと言うCMSシステムで動いてます。
そのベースとなるプログラム言語はPHPという言語を使っていますが、Wordpress自体のサポートが終わる事に、PHPのバージョンを上げてきました。
先日、ふと思いました。使っているPHPのバージョンですが、7.4系を使ってますが、EOL(End Of Life)になってるじゃん!(^_^;
見たからには、放置する訳にも行かないですよね。。
って事で、PHPのバージョンをあげようと思います。どうせなら8.2かな?
と思ってPHP8.2にしょうとしましたが、致命的に動かないのがあって。。8.1にしようと思います。
来年いっぱいは使えるので、1年ぐらいは延命できそうです。
って感じで、PHP8.1をインストールしました。
複数バージョンが動く様にphp-fpmを使って動かしてるので1サイトづつバージョンアップしてみようと思います。
WordPressは3つ動いてます。余りアクセスが少ないのから、移行しましょう!
とやってたら、1つ目から動きません。
なぜ!?と調べてみたら、使ってるプラグインがPHP8に対応してないみたいです。
便利機能的なので、参照のみ残ってるブログなので、プラグインを削除して対応しました。
2つ目。。やっぱり動かない。。
エラーの出てるプラグインを削除していきますが。。そもそものページ表示で使ってるテーマが非対応。。アップデートもなさそうなので、自力で治しちゃおう!と思ってエラーがでた箇所をプログラムコードの修正していきますが。。10箇所ぐらいで挫折。。多すぎ。。(T_T)
って事で、テーマー自体を他の物に変更して対応。。
なんか思いの外大変なんですけど。。長く動いてるブログは古い(更新されていない)プラグインがあるので、意外と大変なのを思い知りました。
最後に、このブログ。。
仕事柄、脆弱性情報はウォッチしてたりします。
脆弱性が出て更新さてないプラグインが、ここ数年で何回か出てたので、古いのは結構置き換わってる気がします。あと、ブログを開始したので、このブログが最後なので、非対応のプラグインは少なそうです。
と思ってPHP8.1に変更してみたら、counter per dayと言うプラグイでエラーが出てます。
お前か。。このプラグインですが、アップデートされて無くて、一度変更しようとしましたが、同じ様な機能のプラグインが見つけられず、挫折した覚えがあります。脆弱性情報がなかったので、まぁいいかぁ。。と面倒くさくなって放置してました(^_^;
アクセス解析自体は必要ないのでカウンターが出るだけでいいんですけどね。。
現在、こんなのが出てます。最悪合計だけ出れば良い!と思います。
で、ネットでお勧めのプラグインを探してみました。全滅したんですけど。。。マジですか。。(T_T)
気づいたら、同じのを2回検証(笑)してたりしたので、メモしながらやってました。
「XT Visitor Counter」がカウンターを表示するだけで良さそうでした。。検索エンジンなどのボットをカウントするみたいで、物凄い勢いでカウントアップしました(笑)
増えるのは嬉しいのですが、めちゃくちゃカウントアップします。詐欺じゃない?(^_^;
「WP Statistics」が機能的には一番良さそうでしたが、ページキャッシュへの対応機能をONにしてもカウントアップしなかったので、ページキャッシュプラグインの方で無理やり除外したら、一見良さそうな感じになりました。
が。。。数日動かしてみましたが、カウントアップが少ない。1/3ぐらい?
ホントは、これが正しいかも?とアクセスログとGoogleアナリティクスと、couter per day(既存)JetPackのカウントを比較してました。以下の感じです。大小関係はだいたいです。
JetPack=counter per day>=Googleアナリティクス>>WP Statistics
WP Statisticsを使ってみたかったですが、回避不能です。なぜ少ないのか微妙すぎて分かりません。
リアルタイムで見てましたが、カウントされないアクセスの理由が理解できないです。
ええ。。。カウンター割と楽しみなので削除はしたくない。
PHPのフリーウェアを使ってWordpress外で、カウントするか!と思いましたが、ソースコードを見るとボット等の抑制がかなり難しそうです。自力で。。と思ったけど、面倒くさい。。
でも、最悪はこれしか無いかなぁ。。(^_^;
ここまで数日かかってますが、ふと思いました、JetPackの数字が表示できれば全て解決では?
割りとマトモそうな数字が出てるんですよね。couter per dayを入れた時もこれがページに表示できればなぁ。。と思ってました。しかもjetpackはブログ開設時から入れてあるので、開始当時からカウントしてるので、信憑性が高いそうです。
おそらくDBに入ってるので、画面に表示してるプログラムを解析して、自力でDBから値を取るか?
カウンターを作るより楽そうな予感がします。
Google先生に聞いてみると、なんとAPIと言うかアクセス数などの情報にアクセスするための関数があるみたい。これは楽勝では?
PHPプログラムとして呼び出しできるみたいです。
どっかに埋めるか?とも思いましたが、今のサイドバーに設置している場所を考えると、ウィジェットとして配置できるのが理想です。が。。PHPコードは書けない。。と思います。
うーん。。。と更に調べると、なんとウィジェットでPHPコードが書けるプラグインがあるみたい。
まずは、「PHP Code Widget」プラグインをインストールします。
「PHP Code Widget」ですが、PHP8で動かなかったので、「Enhanced Text Widget」に変更しました。(^_^;
インストールしたら、有効化します。
ウィジェットを配置します。取り合えず、今のカウンターの下に入れます。
単純にコードが書けるだけですね。そりゃそうか。
以下のサイト様の情報を元になんとかしてみようと思います。
→ WordPressで管理者がコッソリ見るアクセスカウンタを作成する(要Jetpack)/WordPressのカスタマイズからトラブル対応まで
サンプルを見るとこんな感じかな?
アクセス数:
<?php
global $post;
$jetpack_views = stats_get_csv('postviews', array('days' => 30, 'limit' => 1, 'post_id' => $post->ID ));
if (isset($jetpack_views[0]['views'])) {
echo number_format($jetpack_views[0]['views']);
}
?>
stats_get_csv()の仕様が分からん。。。(^_^;
と思ったら、なんか見つけた。
→ Jetpack – stats_get_csv period parameter/StackExchange
一応作ってみたので、ウィジェットに貼り付けます。
<?php
//
global $post;
// 変数初期化
$view_post_count = 0 ;
$view_all_count = 0 ;
$view_today_count = 0 ;
$view_week_count = 0 ;
$view_month_count = 0 ;
$view_year_count = 0 ;
// 各カウンター数を取得
$jetpack_views = stats_get_csv('postviews', array('days' => -1, 'limit' => 1, 'post_id' => $post->ID ));
if (isset($jetpack_views[0]['views'])) {
$view_post_count = $jetpack_views[0]['views'];
}
$jetpack_views = stats_get_csv('views', array('days' => -1, 'limit' => 1 ));
if (isset($jetpack_views[0]['views'])) {
$view_all_count = $jetpack_views[0]['views'];
}
$jetpack_views = stats_get_csv('views', array('days' => 1, 'period' => 1,'limit' => 1 ));
if (isset($jetpack_views[0]['views'])) {
$view_today_count = $jetpack_views[0]['views'];
}
$jetpack_views = stats_get_csv('views', array('days' => 7, 'period' => 1,'limit' => 1 ));
if (isset($jetpack_views[0]['views'])) {
$view_week_count = $jetpack_views[0]['views'];
}
$jetpack_views = stats_get_csv('views', array('days' => 30, 'period' => 1,'limit' => 1 ));
if (isset($jetpack_views[0]['views'])) {
$view_month_count = $jetpack_views[0]['views'];
}
$jetpack_views = stats_get_csv('views', array('days' => 365, 'period' => 1,'limit' => 1 ));
if (isset($jetpack_views[0]['views'])) {
$view_year_count = $jetpack_views[0]['views'];
}
?>
<!-- 取得したアクセスカウンターを表示 -->
<div class="j_counter_t">
<div class="j_counter_row">
<div class="j_counter_cel">
<div class="j_counter_cell_l">現在の記事</div>
<div class="j_counter_cell_l">今日の閲覧数</div>
<div class="j_counter_cell_l">7日間の閲覧数</div>
<div class="j_counter_cell_l">30日間の閲覧数</div>
<div class="j_counter_cell_l">365日間の閲覧数</div>
<div class="j_counter_cell_l">総閲覧数</div>
<div class="j_counter_cell_l">カウント開始日</div>
</div>
<div class="table_cell">
<div class="j_counter_cell_r"><?php echo number_format( $view_post_count ) ; ?></div>
<div class="j_counter_cell_r"><?php echo number_format( $view_today_count ) ; ?></div>
<div class="j_counter_cell_r"><?php echo number_format( $view_week_count ) ; ?></div>
<div class="j_counter_cell_r"><?php echo number_format( $view_month_count ) ; ?></div>
<div class="j_counter_cell_r"><?php echo number_format( $view_year_count ) ; ?></div>
<div class="j_counter_cell_r"><?php echo number_format( $view_all_count ) ; ?></div>
<div class="j_counter_cell_r">2015年4月1</div>
</div>
</div>
</div>
<!-- カウンター一覧のスタイル指定 -->
<style type="text/css">
.j_counter_t{
display: table;
width: 90%;
table-layout: fixed;
margin-left: 15px;
margin-right: 15px;}
.j_counter_row{
display: table-row;
}
.j_counter_cel{
display: table-cell;
vertical-align: top;
}
.j_counter_cell_l{
text-align:left;
}
.j_counter_cell_r{
text-align:right;
}
</style>
昨日とか、相対的な指定方法が分からず。。別にいいかぁ。(^_^;
あと、オンラインの人数も分からない。。と言う、かなさそう?
って事で、このぐらいにしました。
これで良いかなと思います。
って事で、やっとcounter per dayを削除できます。結構重いし止めたかったんですよね。
コメント