PopularPostからview数を取得し、サムネイル画像+タイトルの人気ランキングを実現する方法

この記事は5年前に書かれました。不適当な記述を含む場合がありますので、参考程度に留めてください。

どうもこんばんは!今日は【PopularPostでサムネイル画像とタイトルのランキング表示を実現する方法】について書きたいと思います。たまに欲しいなぁと思う機能なのでここにメモとして残しておきますね。ちなみに今回はWP標準機能のサムネイル画像ではなくカスタムフィールドで投稿したサムネイル画像を取得する方法になっております。個人的にはこっちの方をよく使うので。

MySQLの記述


SELECT id,
meta_value AS imgurl,
post_title AS title,
ABS( pageviews ) AS post_count
/* 小数点はないですが一応絶対値 */
FROM wp_posts post,
wp_popularpostsdata view,
wp_postmeta meta
WHERE post.ID = view.postid
AND post.ID = meta.post_id
AND post_status = ‘publish’
AND meta_key = ‘メイン画像URL’
/* カスタムフィールドで設定したサムネイル画像の名称 */
AND post_type = ‘post’
/* postの種類|カスタムタクソノミー未使用の場合はpostで大丈夫 */
HAVING post_count >=100
/* 100view以上を取得 */
ORDER BY pageviews DESC
/* 降順に表示 */
LIMIT 0 , 10"
/* 10位まで表示 */

余計な部分も有りますが上記の記述で
・PopularPostからview数の取得
・view数に応じた降順ソート
・上位10件の取得
・カスタムフィールドからのサムネイル取得
・タイトル文の取得
・IDの取得
が実現できます。

PHPの記述


<?php

$result = $wpdb->get_results(
"SELECT id,
meta_value AS imgurl,
post_title AS title,
ABS( pageviews ) AS post_count
FROM wp_posts p,
wp_popularpostsdata v,
wp_postmeta m
WHERE p.ID = v.postid
AND p.ID = m.post_id
AND post_status = ‘publish’
AND meta_key = ‘メイン画像URL’
AND post_type = ‘post’
HAVING post_count >=100
ORDER BY pageviews DESC
LIMIT 0 , 10"
);

$rank = 1;

foreach ($result as $row) {
echo "<ul>";
echo "<li><span class=’ranking’>Rank".$rank."</span>".$row->post_count."view </li>";
echo "<li><a href=".get_permalink($row->id).">".mb_substr($row->title,0,40)."</a></li>";
echo "<li><img src=".$row->imgurl." width=’600px’></li>";
echo "</ul>";
$rank ++;
}
?>


ちなみにphpで表示する際には$recent_postsで配列変数に代入する必要が有ります。その際には以下のような記述が必要になります。
$recent_posts = $wpdb->get_results("SELECT ~~~ ");

あとは連想配列に格納して表示しましょう。rowからcol指定で任意の値が取得可能です。

以上です。