WordPress で最近の人気記事を一覧にする時などにコメントをベースにソートするのも良いでしょう。今から紹介するコードを functions.php にコピーすれば、特定の場所で以下のタグを書けば一覧にされます。
1 | <?php postPopularList(); ?> |
コードは以下です。パリパリ書かせて頂きました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | function postPopularList() { global $post; my_query_posts( Array( 'post_type' => 'post', 'orderby' => 'date', 'order' => 'DESC', 'showpost' => -1, 'posts_per_page' => -1, 'date_from' => date('Y-m-d', strtotime('-1 weeks')), 'date_to' => date('Y-m-d') ) ); $popularlist = Array(); $sortcount = Array(); if(have_posts()) { while(have_posts()) { the_post(); array_push( $popularlist, sprintf( '<li><a href="%s">%s <small>(%sコメント)</small></a></li>', get_permalink($post->ID), get_the_title(), $post->comment_count ) ); array_push($sortcount, $post->comment_count); } } wp_reset_query(); array_multisort($sortcount, SORT_DESC, $popularlist); $count = 0; foreach($popularlist as $list) { $count++; echo $list; if($count >= 10) break; } } global $my_where; function my_posts_where($where) { global $my_where; return $where . $my_where; } function my_query_posts($query) { global $wpdb, $my_where; $q = wp_parse_args($query); $my_where = ''; if($q['date_from']) { if($q['date_to']) $my_where = " AND ( DATE($wpdb->posts.post_date) BETWEEN '" . $q['date_from'] . "' AND '" . $q['date_to'] . "' )"; else $my_where = " AND DATE($wpdb->posts.post_date) >= '" . $q['date_from'] . "'"; } else if ($q['date_to']) { $my_where = " AND DATE($wpdb->posts.post_date) <= '" . $q['date_to'] . "'"; } add_filter('posts_where', 'my_posts_where'); query_posts($query); remove_filter('posts_where', 'my_posts_where'); } |
kz さんの my_query_posts() を使わせて頂いております。いつも愛用させて頂いております。ありがとう kz さん。
コメント