wordpress

wordpressでプラグインを使わずに人気記事をサイドバーに表示する

人気記事のコメント数、はてなブックマーク数を表示する

表示回数以外にもコメント数やはてなブックマーク数を表示できるのでそれぞれについて以下にメモします。

コメント数を表示する

コメント数を表示するには、1ページに記載したショートコードの中の下記

<span class="label label-danger"><?php echo the_views(); ?></span>

を以下に置き換えればOKです。もちろん両方書けば表示回数とコメント数の両方を表示可能です。

<span class="label label-danger"><?php echo get_comments_number( get_the_ID() ); ?> comments</span>

get_comments_numberで各記事のコメント数を取得しています。

ちなみに、コメント数の多い順に表示したい場合は、WP_Queryの部分でorderbycomment_countを指定することにより可能です。以下のようにすればOKです。

$query = new WP_Query(array(
    'orderby' => 'comment_count',
    'order' => 'DESC',
    'posts_per_page' => 10
  ));

上記によりコメント数が多い上位10件の記事を取得することができます。

はてなブックマーク数を表示

ショートコードを以下のようにします。1ページ目でのせたショートコードとほぼおなじなのでコメントは省略しています。

function wpb_most_viewed_posts() {
ob_start();
?>
<ul class="ppst">
<?php
$query = new WP_Query(array(
    'meta_key' => 'views',
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'posts_per_page' => 5
  ));

while ($query->have_posts()) : $query->the_post();
$hatena = file_get_contents("http://api.b.st-hatena.com/entry.count?url=" . rawurlencode( get_permalink( get_the_ID() ) )) ?: 0;
?>
<li>
<a href="<?php the_permalink(); ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></br>
<span class="ppst-date"><?php the_date(); ?></span>
<span class="label label-danger"><?php echo $hatena; ?> users</span>
</li>
<?php
endwhile;
?>
</ul>
<?php
$output = ob_get_clean();
return $output;
}

add_shortcode('wpb_most_viewed', 'wpb_most_viewed_posts');
add_filter('widget_text', 'do_shortcode');

上記の$hatenaという変数に各記事のはてなブックマーク数を格納しています。file_get_contentsではてなブックマーク数を取得するAPIを使っています。
はてなブックマークAPIについては以下の記事が大変参考になると思います。

はてなブックマークのAPIで指定したURLのはてブ数を取得してPHPで出力する | Ad A Type Inc.
urlencode

また、はてなブックマーク数が0の場合は$hatenaに0を格納しています。エルビス演算子という書き方のようです。下記が参考になります。なお、エルビス演算子はPHP5.3以降でないと使用できないので、使う場合はまず使用しているレンタルサーバの管理画面などでPHPのバージョンを確認したほうがいいです

エルビス演算子でスマートに変数を初期化 by do7be | Qiita

なお、残念ながら自作のショートコードではてなブックマーク数が多い順番に記事を表示する方法は知らないのでどなたか良い方法があれば教えて頂ければと思います。

今月の人気記事、今週の人気記事を表示する

まず、投稿日が今月である記事のうち表示回数上位5件を表示したい場合は以下のようにします。1ページ目のショートコード内WP_Queryの条件にdate_queryという条件を新しく追加するだけです。

  // 投稿日が今月である記事のうち表示回数上位5件を取得
  $query = new WP_Query(array(
      'meta_key' => 'views',
      'orderby' => 'meta_value_num',
      'order' => 'DESC',
      'date_query' => array(
        array(
          'year' => date( 'Y' ),
          'month' => date( 'M' ),
        ),
      ),
      'posts_per_page' => 5
    ));

もし投稿日が今週である記事という条件にしたい場合は、上記の'month' => date( 'M' )'week' => date( 'W' )にすればOKです。なぜこうなるかについては、以下のサイトに詳しく書いてあるので参考になると思います。

関数リファレンス/WP Query | WordPress Codex 日本語版

まとめ

ここでメモしたショートコードを使えば、人気記事だけでなく、色々な条件での記事取得と表示ができます。他の便利な方法があればまたメモしたいと思います。

SPONSORED LINK

One thought on “wordpressでプラグインを使わずに人気記事をサイドバーに表示する

  1. 最後の今月の人気記事を表示させる場合、
    ‘month’ => date( ‘M’ )
    ではなく
    ‘month’ => date( ‘m’ )
    ではないでしょうか。

コメントを残す

メールアドレスが公開されることはありません。