下のように人気記事ランキングを表示する方法です。見た感じはお使いのテーマによって異なると思いますがこんな感じになりますよ。

 

現在(2016年12月)、私は『賢威7』を使っています。

通常、賢威7を含めワードプレスでは人気記事ランキングはサイドバーにウィジェットとして表示することしかできません。私は記事の上(ヘッダーと記事本文の間)に人気記事ランキングを表示したかったのでどうやったら表示できるのか調べてみました。

賢威7には初めからサイドバーに表示する【PVランキング表示】というウィジェットがあるのでこの辺のプログラムをいじって応用すればいいのかもしれません。でも、私はパソコン(プログラム)の知識に疎いため、細かいところまではよくわかりませんでした。そこで今回は、ウィジェットやプラグインを使わずに人気記事ランキングを記事の上に表示する方法を見つけたので報告します。

 

参考にさせていただいたサイトさん

参考 WordPressにプラグインを使わず定期的に更新される人気記事を表示する|行き着く先はあんこ

 

やることは下の2つだけです。

  • STEP1 functions.phpににコードを貼りつける
  • STEP2 single.phpにコードを貼りつける

 

それでは実際に作業を進めてみましょう。

●必ずバックアップを取って作業を進めてください。

●作業をしてサイトが崩れてしまった場合は自己責任でお願いします。


スポンサーリンク

STEP1 functions.phpににコードを貼りつける

ワードプレスの編集画面で【外観】【テーマの編集】を開きます。そして画面右側の中から【テーマのための関数(functions.php)】を選択します。そして開いた画面の一番下に以下のコードをコピペしてください。

※ 一番下と言っても ?> の上になるように貼ってくださいね!

 

//---------------------------------------------------------------------------
// 最近の人気記事
//---------------------------------------------------------------------------

//アクセス数をカウントする
function set_post_views() {
$postID = get_the_ID();
$num = (int)date_i18n('H'); // 現在時間で番号取得
$key = 'pv_count';
$count_key = '_pv_count';
$count_array = get_post_meta( $postID, $count_key, true );
$sum_count = get_post_meta( $postID, $key, true );if( !is_array($count_array) ) { //配列ではない
$count_array = array();
$count_array[$num] = 1;
} else { //配列である
if ( isset( $count_array[$num] ) ) { //カウント配列[n]が存在する
$count_array[$num] += 1;
} else { //カウント配列[n]が存在しない
$count_array[$num] = 1;
}
}//アクセス数を更新する
update_post_meta( $postID, $count_key, $count_array );
update_post_meta( $postID, $key, $sum_count + 1 );
}//アクセス数をリセットする
function reset_post_views() {
$num = (int)date_i18n('H');
$key = 'pv_count';
$reset_key = '_pv_count';$args = array(
'posts_per_page' => -1,
'post_type' => 'post',
'post_status'=>'publish',
'meta_key' => $reset_key,
);$reset_posts = get_posts($args);
if($reset_posts):
foreach($reset_posts as $reset_post):
$postID = $reset_post->ID;
$count_array = get_post_meta( $postID , $reset_key, true );

if ( isset( $count_array[$num] ) ) { //カウント配列[n]が存在する
$count_array[$num] = 0;
}

//アクセス数をリセットする
update_post_meta( $postID, $reset_key, $count_array );
update_post_meta( $postID, $key, array_sum( $count_array ) );
endforeach;
endif;
}

//リセット関数を実行するアクションフックを追加
add_action( 'set_hours_event', 'reset_post_views' );

//実行間隔の追加
function my_interval( $schedules ) {
// 1時間ごとを追加
$schedules['1hours'] = array(
'interval' => 3600,
'display' => 'every 1 hours'
);
return $schedules;
}
add_filter( 'cron_schedules', 'my_interval' );

//アクションフックを定期的に実行するスケジュールイベントの追加
function my_activation() {
if ( ! wp_next_scheduled( 'set_hours_event' ) ) {
wp_schedule_event( 1451574000, '1hours', 'set_hours_event' );
}
}
add_action('wp', 'my_activation');

//ボットの判別
function isBot() {
$bot_list = array (
'Googlebot',
'Yahoo! Slurp',
'Mediapartners-Google',
'msnbot',
'bingbot',
'MJ12bot',
'Ezooms',
'pirst; MSIE 8.0;',
'Google Web Preview',
'ia_archiver',
'Sogou web spider',
'Googlebot-Mobile',
'AhrefsBot',
'YandexBot',
'Purebot',
'Baiduspider',
'UnwindFetchor',
'TweetmemeBot',
'MetaURI',
'PaperLiBot',
'Showyoubot',
'JS-Kit',
'PostRank',
'Crowsnest',
'PycURL',
'bitlybot',
'Hatena',
'facebookexternalhit',
'NINJA bot',
'YahooCacheSystem',
'NHN Corp.',
'Steeler',
'DoCoMo',
);
$is_bot = false;
foreach ($bot_list as $bot) {
if (stripos($_SERVER['HTTP_USER_AGENT'], $bot) !== false) {
$is_bot = true;
break;
}
}
return $is_bot;
}

 

これでfunctions.phpのほうはOKです。

 

STEP2 single.phpにコードを貼りつける

次に表示用のコードをsingle.phpの中に貼りつけます。

STEP1と同じように【外観】【テーマの編集】を開いて、画面右側にある【個別投稿(single.php)】を選択します。そして以下のコードを貼りつけます。

<?php if( is_single() && !is_user_logged_in() && !isBot() ): //個別記事 かつ ログインしていない かつ 非ボット
set_post_views(); //アクセスをカウントする
endif; ?>
<section class="popular-box">
<h4>最近の人気記事</h4>
<?php
$args = array(
'post_type' => 'post',
'numberposts' => 8, //表示数
'meta_key' => 'pv_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
);
$posts = get_posts( $args );
if( $posts ): ?>
<ul>
<?php foreach( $posts as $post ) : setup_postdata( $post ); ?>
<li>
<a href="<?php the_permalink(); ?>" >
<!-- <div><?php the_post_thumbnail( 'thumbnail' ); ?></div> -->
<div><?php the_title(); ?></div>
</a>
</li>
<?php endforeach;
wp_reset_postdata(); ?>
</ul>
<?php else : ?>
<p>アクセスランキングはまだ集計されていません。</p>
<?php endif; ?>
</section>

 

ここで貼りつける位置を探すのに苦労しました。ちょっと違うところに貼ってしまうと、うまく画面が表示されなかったり、リンクがおかしくなったりとうまく動作しなくなります。で、下で示した位置(12行目)に貼りつけるのが最適だと私の中では結論に至りました。



スポンサーリンク


 

他のテンプレートではどうかわかりませんが、私の使っている「賢威7.0 ビューティ版」では <!-- 記事 --> 真上に貼りつけるとうまく表示されるようになりました。

ホントすみません、私、この辺のプログラム関係よくわからなくて、手探りで探したものでアレなんですが、たぶん合ってます。私は問題なく動作しているのを確認しているので大丈夫だと思いますが、貼りつけた後はご自分で確認してみてくださいね。

 

ちなみにSTEP2のコードについて自分で変更できる部分が2点あります。

  1. 5行目の“最近の人気記事”という部分を“よく読まれている記事”などと変えれば見出し部分の文言を変更することが可能です。
  2. 9行目のデフォルトで“8”になっている数値を“好きな数値”にすれば表示される記事数を変更できます。

 

 

今後、この表示をしたことによりどのくらいアクセス数が変わるのか効果のほどを追跡してみたいなと思っています。とりあえず1ヶ月くらい複数のブログで試してみて公開してみるつもりですのでお楽しみに~^^

 

スポンサーリンク