WordPress Popular Postsを使用してカテゴリ別人気記事の表示方法!

category-popular-posts-2

WordPress Popular Postsを使用してカテゴリ別人気記事の表示方法です。

ブログ開始当初より、サイドバーにWordPress Popular Postsを使用して人気記事を表示していました。

WordPress Popular Posts を通常の設定で使用すると、ブログ全体でみた人気記事の表示になります。以前はその設定で使用していました。

当ブログのジャンルですが、以前はWordPressのカスタマイズやプラグイン紹介、iPhoneなどのApple製品を中心に気になる記事を書いてたのが、現在は、それらだけでなく、いろいろな気になるものを記事にし始め、カテゴリ分けも細かく行ったため、多方向に向いています。

以前に和洋風KAIさんの記事で「ブログでジャンルを絞れないならページで絞る。」というのを読んで、「それなら、カテゴリ別に人気記事を表示しよう!」と思ってみたものの、重い尻が上がらず現在に至ったわけですが、なんとかいろいろな方のサイトを参考に完成しました。

スポンサーリンク

カテゴリ別に人気記事の表示方法

仕様

まず、その名の通りにカテゴリ別に人気記事を表示させるのですが、カテゴリによっては記事数が少ないということもあり、人気記事数を5つにし、サイドバーの長さは変えたくはなかったので、最新記事(こちらはカテゴリに関係なく)を4つ追加表示する設定にしました。

また、シングルページ(個別記事)とカテゴリページを表示する場合のみで、トップページやアーカイブページなどは、以前と変わらずに全体の人気記事トップ10が表示される仕様になっています。

Code

まず、functions.phpにカテゴリを取得するコードを書きます。
※必ずfunctions.phpをいじる時は、いじる前にバックアップを忘れずにしましょう。以前に真っ白になったことがありますので…

/* カテゴリ取得 */
//wp_head()実行時にget_current_category()を実行
add_action('wp_head', 'get_current_category');

// 現在のカテゴリを取得
function get_current_category()
{
	global $_curcat;
	$cate = null;
	if( is_category() ) {
		//カテゴリー表示だったら
		
		$cat_now = get_the_category();
		// 親の情報を$cat_nowに格納
		$cate = $cat_now[0];
		
	} else if (is_single() ) {
		//シングルページ表示だったら
		$cates = get_the_category();
		$i = 0;
		$use_category = 0;
		foreach ($cates as $cate) {
			//未分類を除外した配列の一番初めのカテゴリを選択
			if($cate->category_parent > 0 && $use_category == 0) {
				$use_category = $i;
			}
			$i++;
		}
		$cate = $cates[$use_category];
	}
	//カテゴリーのオブジェクトごと保持
	$_curcat = $cate;
	return $cate;
}
/* カテゴリ取得終了 */

次に、サイドバーのウィジェットでPHPが使用できるようにするために、プラグインを使用しました。

私は以前から、おすすめ記事をサイドバーのウィジェットを使用して表示させているので、PHPを使用できるプラグイン「PHP Code Widget(Executable PHP widget)」を利用しています。

php code

こんな感じにPHPが使用できます。

<?php 
global $_curcat;
$caca=$_curcat->cat_ID;
?>
<h2><?php echo get_cat_name($caca) ;?> 読まれている記事</h2>
<div class="popular-posts">
<?php 
if (is_single() || is_category()) {
get_mostpopular('order_by="views"&range=all&cat='.$caca.'&limit=5&stats_comments=0& stats_views=0&post_type=post&thumbnail_width=75&thumbnail_height=75&thumbnail_selection=usergenerated&post_start="<li class="p-posts">"&post_end="</li>"');
}else{
get_mostpopular('order_by="views"&range=all&limit=10&stats_comments=0& stats_views=0&post_type=post&thumbnail_width=75&thumbnail_height=75&thumbnail_selection=usergeneratedpost_start="<li class="p-posts">"&post_end="</li>"');
}?>
</div>

<?php if (is_single() || is_category()):?>
<h3>最新記事</h3>
<ul class="new-entry">
<?php
$args=array( 'posts_per_page'=>4 );
$my_query = new WP_Query($args);
if( $my_query->have_posts() ) {
  while ($my_query->have_posts()) : $my_query->the_post(); ?>
    <li>
    <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php _e('Permanent link to'); ?> <?php the_title(); ?>"><?php the_post_thumbnail( array(75,75) ); //アイキャッチ画像を表示 ?></a>
    <a href="<?php the_permalink() ?>" rel="bookmark" title="<?php _e('Permanent link to'); ?> <?php the_title(); ?>"><?php the_title(); ?></a>
  </li>
<?php endwhile; wp_reset_postdata(); ?>
<?php } ?>
</ul>
<?php endif;?>

あとは、CSSで整えるだけです。

あとがき 

この度は、PLUSさんの「ワードプレスのサイドバーにカテゴリ別人気記事を表示する」と、Webデザインレシピさんの「WordPressのプラグイン、ウィジットなしで追加できる機能いろいろ:ソーシャルボタン多め」を参考にさせていただきました。大変わかりやすく勉強になりました。

※また、WordPress Popular Postsでサムネイル表示している場合は、脆弱性が見つかっているとのことで注意が必要です。PLUSさんのページに詳しい内容が載っています。

ページで絞るというのには、まだまだ課題は残っていますが、とりあえず一つは終了ということで… 

via : PLUSWebデザインレシピ