WordPress - 人気記事一覧修正!

更新日時:


以前、WordPress のアクセス統計プラグイン「CounterizeII」を使って人気記事一覧を表示する方法(SQL)を紹介しました。

(「CounterizeII」を弄ったことのある方なら、テーブル名・フィールド名に馴染みがあると思います)

しかし、考え方を間違えていたことが発覚!

  • 【誤】過去30日以内に投稿された記事のアクセス数を集計
  • 【正】過去30日以内にアクセスのあった記事のアクセス数を集計

使用するSQLを修正しました。

SQL文の修正

  • 【誤】過去30日以内に投稿された記事のアクセス数を集計
SELECT B.postID, A.post_title, B.CNT 
  FROM `wp_posts` AS A 
       INNER JOIN 
       ( SELECT postID, SUM( count ) AS cnt 
           FROM `wp_Counterize_Pages` 
          GROUP BY postID ) AS B 
    ON A.ID = B.postID 
 WHERE B.postID IS NOT NULL AND A.post_date > date_add( now(), interval - 30 day )
 ORDER BY B.cnt DESC 
 LIMIT 10
  • 【正】過去30日以内にアクセスのあった記事のアクセス数を集計
SELECT B.postID, A.post_title, B.CNT 
  FROM `wp_posts` AS A 
       INNER JOIN 
       ( SELECT BC.postID AS postID, COUNT(*) AS CNT
           FROM ( SELECT BA.pageID AS pageID, BB.postID AS postID
                    FROM ( SELECT timestamp, pageID
                             FROM `wp_Counterize`
                            WHERE timestamp > date_add( now(), interval - 30 day )
                         ) AS BA
                         INNER JOIN
                         `wp_Counterize_Pages` AS BB
                      ON BA.pageID = BB.pageID ) AS BC
          GROUP BY BC.postID ) AS B
    ON A.ID = B.postID 
 ORDER BY B.cnt DESC 
 LIMIT 10

functions.php の修正

関数の使い方は WordPress - CounterizeIIから人気記事リスト取得関数作成! を参照してください。

  • 【誤】
function most_popular_post( $cnt, $days = 0 ) {
  global $wpdb;
  if ( $days == 0 ) {
    $day_opt = "";
  } else {
    $day_opt = " AND A.post_date > date_add( now(), interval -" . $days . " day )";
  }
  $sql = "SELECT B.postID, A.post_title, B.CNT "
       . "  FROM `wp_posts` AS A "
       . "       INNER JOIN "
       . "       ( SELECT postID, SUM( count ) AS cnt "
       . "           FROM `wp_Counterize_Pages` "
       . "          GROUP BY postID ) AS B "
       . "    ON A.ID = B.postID "
       . " WHERE B.postID IS NOT NULL " . $day_opt
       . " ORDER BY B.cnt DESC "
       . " LIMIT  ". $cnt;
  $res = $wpdb->get_results( $sql, ARRAY_N );
  return $res;
}
  • 【正】
function most_popular_post( $cnt, $days = 0 ) {
  global $wpdb;
  if ( $days == 0 ) {
    $day_opt = "";
  } else {
    $day_opt = "WHERE timestamp > date_add( now(), interval - " . $days . " day ) ";
  }
  $sql = "SELECT B.postID, A.post_title, B.CNT "
       . "  FROM `wp_posts` AS A "
       . "       INNER JOIN "
       . "       ( SELECT BC.postID AS postID, COUNT(*) AS CNT "
       . "           FROM ( SELECT BA.pageID AS pageID, BB.postID AS postID "
       . "                    FROM ( SELECT timestamp, pageID "
       . "                             FROM `wp_Counterize` "
       . "                            " . $day_opt
       . "                         ) AS BA "
       . "                         INNER JOIN "
       . "                         `wp_Counterize_Pages` AS BB "
       . "                      ON BA.pageID = BB.pageID ) AS BC "
       . "          GROUP BY BC.postID ) AS B "
       . "    ON A.ID = B.postID "
       . " ORDER BY B.cnt DESC "
       . " LIMIT  ". $cnt;
  $res = $wpdb->get_results( $sql, ARRAY_N );
  return $res;
}

修正結果は、このブログのサイドバーでご確認いただけます。

ついでに、Ruby on Rails 製のホームページで公開している統計も修正した。 ※上記で【誤】としているものを「投稿日時ベース」として、【正】としているものを「アクセス日時ベース」として閲覧できるようにした。

以上。

 

Sponsored Link

 

コメントする