(WordPress)Popular Post がヘンかもしんない

ProudlyてないWordpressなネタは気が引ける。ともあれ Popular Post がなんかヘンになってる気がしている。どうも Google Analytics の結果と合ってないっぽい(どうやら今みえてるより「読まれてる」らしい)。調査しなきゃと思うも腰が重い。うー PHP みたくない。

少し見始めてるが、bot 判定はこれ、妥当なのかいな?:

WordPress コードが読みやすいのはステキなコーディング規約のおかげ。読みやすさのために「横に目一杯詰め込んで横スクロールバーを必ず出してください」と書かれているからだ。なんてな。
 1 		/**
 2 		 * Bots list.
 3 		 *
 4 		 * @since	3.0.0
 5 		 * @var		array
 6 		 */
 7 		protected $botlist = array( 'bot', 'crawl', 'curl', 'facebookexternalhit', 'geturl', 'google', 'java', 'msn', 'perl', 'slurp', 'spider', 'sqworm', 'search', 'wget' );
 8 
 9 // ...
10 		
11 		/**
12 		 * Gets post/page ID if current page is singular
13 		 *
14 		 * @since	3.1.2
15 		 */
16 		public function is_single() {
17 			$trackable = array();
18 			$registered_post_types = get_post_types( array('public' => true), 'names' );
19 			
20 			foreach ( $registered_post_types as $post_type ) {
21 				$trackable[] = $post_type;
22 			}
23 			
24 			$trackable = apply_filters( 'wpp_trackable_post_types', $trackable );
25 			
26 			if ( is_singular($trackable) && !is_front_page() && !is_preview() && !is_trackback() && !is_feed() && !is_robots() ) {
27 				global $post;				
28 				$this->current_post_id = ( is_object($post) ) ? $post->ID : 0;
29 			} else {
30 				$this->current_post_id = 0;
31 			}
32 		} // end is_single
33 
34 // ...
35 		/**
36 		 * Checks if visitor is human or bot.
37 		 *
38 		 * @since	3.0.0
39 		 * @return	bool	FALSE if human, TRUE if bot
40 		 */
41 		private function __is_bot() {
42 
43 			if ( !isset($_SERVER['HTTP_USER_AGENT']) || empty($_SERVER['HTTP_USER_AGENT']) )
44 				return true; // No UA? Bot (probably)
45 
46 			$user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
47 
48 			foreach ( $this->botlist as $bot ) {
49 				if ( false !== strpos($user_agent, $bot) ) {
50 					return true; // Bot
51 				}
52 			}
53 
54 			return false; // Human, I guess...
55 
56 		} // end __is_bot

これを書き始めたまさにその時間に携帯デバイスから 2016年現在の「Python を android で使う」 を読んでいた人がいるはずなのだが、ほら、popular、増えてない。






04:30記:
うーん、「ログインしてない自分@IE」で今アクセスしてみてわかったこと二つ:

  1. 新しい投稿へのカウントはインクリメントされる (つまりこのページの一回分は自家発電)
  2. 古い投稿へのカウントがインクリメントされてない(今富山弁で、いいえ違いますにアクセスしてみたのにカウントあがってない)

なんかこれがアヤシイんだよなぁ:

 1 			// Update all-time table
 2 			$result1 = $wpdb->query( $wpdb->prepare(
 3 				"INSERT INTO {$table}data
 4 				(postid, day, last_viewed, pageviews) VALUES (%d, %s, %s, %d)
 5 				ON DUPLICATE KEY UPDATE pageviews = pageviews + %4\$d, last_viewed = '%3\$s';",
 6 				$id,
 7 				$now,
 8 				$now,
 9 				$views
10 			));
11 
12 			// Update range (summary) table
13 			$result2 = $wpdb->query( $wpdb->prepare(
14 				"INSERT INTO {$table}summary
15 				(postid, pageviews, view_date, last_viewed) VALUES (%d, %d, %s, %s)
16 				ON DUPLICATE KEY UPDATE pageviews = pageviews + %2\$d, last_viewed = '%4\$s';",
17 				$id,
18 				$views,
19 				$curdate,
20 				$now
21 			));

「ON DUPLICATE KEY UPDATE 」なんて高尚な機能、「ありとあらゆる DBMS で使える」なんて到底思えないが、なんだろ、新しいヤツでは使えるの? でめでたく「これが使えてない」ってことぁない? これが原因なら相当に腹立たしい。(とはいえバカチョンでプラグインをほいほい更新してるアタシもダメかもしれんけどさ。これが理由ならたぶんインストーラのデータベース移行が何かチョンボやらかしてんじゃないかと思う。)