ショウジンブログ on Hatena

“お芝居をしないと、この社会では異邦人として扱われるほかない”

人気の記事を表示(閲覧数で抽出、ソート)WordPress

WordPressで人気の記事を表示するには、よく使われるものが二通りあります。

  1. プラグインのWordPress Popular Postsを使う
  2. プラグインのWP-PostViewsを使う

一番大きな違いは1の場合は期間を指定(例:日、月等)して ソート出来ること。2は閲覧数を保持するためのカスタムフィールドを 用意して、そこにトータルの閲覧数を保持していくだけなので 日や月ごとの期間指定が出来ません。

なので、日や月ごとの期間を指定したい場合は WordPress Popular Postsを使います。

ただし、WordPress Popular Postsでは投稿本文を引っ張ってこれません。 投稿本文の抜粋も表示したい場合はこのプラグインは使えません。

この違いに注意して、どちらを使うか決めます。 (本文の抜粋表示が不要であれば、実装はWordPress Popular Postsのほうが楽です)

WordPress Popular Posts

以下、指定できるオプションもつけた例です。 それぞれのオプション詳細はプラグインの設定画面にもあります。

*アイキャッチ画像も引っ張ってこれます

参考記事:http://afirika.net/wordpress-popular-posts

<?php
 $wpp = array (
 'cat' => ''.$cat_id.'',
 'limit' => '5',
 'range' => 'all',
 'order_by' => 'views',
 'post_type' => 'post',
 'stats_comments' => '0',
 'stats_views' => '0',
 'title_length' => '25',
 'thumbnail_width' => '70',
 'thumbnail_height' => '70',
 'stats_category' => '0',
 'wpp_start' => '',
 'wpp_end=' => '',
 'post_html' => '{thumb} {title} {stats} ',
); ?>
<?php wpp_get_mostpopular($wpp); ?>

WP-PostViews

西之表さんで実装した例です。

株式会社西之表コーポレーション

f:id:showjinx:20160415144657p:plain

プラグインをインストールしたら設定を確認します。

基本的にデフォルトで大丈夫です。

一点、閲覧数のカウントをゲストのみにするか、すべてのアクセスにするか。この点くらいです。

本来であればゲストのみ(管理者がログインしている状態でのアクセスはカウントしない)が当然ですが、デバッグ中とか、とにかくカウントさせて確認する必要がある場合もあります。

そういうときは「everyone」にしておきます。

f:id:showjinx:20160415144919p:plain

以下が表示させたいテンプレートへの記述例です。

通常よく使うquery_postsを使ったループの記述にWP-PostViewsが用意してくれたカスタムフィールドの値を参照するための引数を追加しています。

<div class="top_side">
    <h2><span>サービス紹介</span></h2>
    <ul class="services">
        <?php query_posts('posts_per_page=10&meta_key=views&orderby=meta_value_num&order=DESC'); ?>
        <?php if (have_posts()) : ?>
        <?php while (have_posts()) : the_post(); $views = get_post_meta($post->ID, 'views', true); /* ループ開始 */ ?>
            <li class="clearfix"><a href="<?php the_permalink(); ?>" class="thumb"><?php the_post_thumbnail(array(50,50)); ?></a><a href="<?php the_permalink(); ?>"><h3><?php if(mb_strlen($post->post_title)>18) { $title= mb_substr($post->post_title,0,18) ; echo $title. … ;
            } else {echo $post->post_title;}?></h3></a><p><?php echo my_excerpt(40); ?><span><?php /* echo $views . 'views'; */ ?></span></p></li>
        <?php endwhile; ?>
        <?php else : ?>
            <li>投稿はありません</li>
        <?php endif; ?>
    </ul>
<!-- / .top_side --></div>

query_posts()のオプションについては以下になります。

posts_per_page : 何件表示するか
meta_key : 参照するカスタムフィールドを指定
orderby : カスタムフィールドの値を「数値」として扱うための指定
order : 降順か昇順か(ランキング表示であれば降順=DESC)

変数 “$views” の指定は閲覧数(viewsのカウント数)を出力する際に記述します。不要な場合は記述しなくて構いません。

【補足】 あとはこのループにはタイトルを指定した文字数で制限して丸めたり、独自に用意した抜粋文用の関数でこれも文字数を制限して丸めたりしています。

基礎からのWordPress 改訂版 (BASIC LESSON For Web Engineers)

基礎からのWordPress 改訂版 (BASIC LESSON For Web Engineers)