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が使用できます。
<?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 : PLUS、Webデザインレシピ