WP-PostViewsで、現在とそれ以外のカテゴリ人気記事(サムネイル付き)を表示

WordPress Popular Postsというプラグインを使って、サイドバーと記事終わりに人気記事を表示していたのですが、ちょっと思わしくなくなっちゃったのでWP-PostViewsというプラグインで同じ事ができないか試してみました。
WordPress Popular Postsにて
こんなレイアウトにしてました
これが、どうにももうちょい理想に届かなかった…!
WP-PostViewsにて
こちらのプラグインで同じレイアウトに挑戦!
こちらにあるとおり、WP-PostViewsは有効化するだけでカスタムフィールドにPVを記録していってくれるので、それを利用すればかんたんです!
現在のカテゴリの人気記事
出来上がりはこんなイメージ。
$now_id = wp_get_post_categories($post->ID,'fields=ids');
single.phpでwp_get_post_categoriesという関数を使って、現在のカテゴリを配列で取得したら、
<?php
global $post;
$args = array(
'posts_per_page' => 5,
'category__in' => $now_id,
'meta_key' => 'views',
'orderby' => 'meta_value_num'
);
$posts = get_posts( $args );
foreach( $posts as $post ) {
setup_postdata($post);
?>
<li><?php the_post_thumbnail( array(100, 100), array('alt'=>get_the_title()) ); ?><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
}
wp_reset_postdata();
?>
こうやって書けば良いだけ。おおー、らくちんだ。CSSは先程のこちらをそのまま。
他カテゴリの人気記事
出来上がりはこんなイメージ。
最初、現在のカテゴリ以外のカテゴリIDを配列で取得…、っていうのをどうやったらいいのか悩んで、
<?php
//現在以外のカテゴリ-IDを配列で取得
$now_id = wp_get_post_categories($post->ID,'fields=ids');
$args = array(
'exclude'=>$now_id,
'fields'=>'ids'
);
$terms = get_terms('category', $args);
?>
このように$termsに特定以外のカテゴリID配列が入るようにがんばりました。
でもそんなことしなくても、現在以外のカテゴリは、
<?php
global $post;
$args = array(
'posts_per_page' => 5,
'category__not_in' => $now_id,
'meta_key' => 'views',
'orderby' => 'meta_value_num'
);
$posts = get_posts( $args );
foreach( $posts as $post ) {
setup_postdata($post);
?>
<li><?php the_post_thumbnail( array(100, 100), array('alt'=>get_the_title()) ); ?><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
}
wp_reset_postdata();
?>
こうやってnot_inで書いてあげれば良いだけ! こんなに簡単に出来るんですね…(*´ω`*)




2件のコメント
大変参考になりました。
よろしければ教えていただきたいのですが、
サムネイルと記事タイトルに加え、記事に設定したタグ名を表示するにはwp-postviews.phpにどんな記述を加えればよいのでしょうか?
bumさん、コメントありがとうございます。
略 $tags = get_the_tags($post->ID); $tags_list = ''; foreach($tags as $val) {$tags_list = $tags_list . '<a href="http://xxx/tag/' . $val -> slug . '/">' . $val -> name . '</a> ';} 略 $temp = str_replace("%TAGS%", $tags_list , $temp); $output .= $temp;と書けば
%TAGS%で出力できるようになります。当初
the_tags()が使えれば楽かなと思ったのですが、投稿IDの指定が出来なさそうなのでget_the_tags()を使って指定記事のタグ情報を配列に格納して、nameとslugを取り出してリンクの形に生成して出力、という形にしています。WordPress › フォーラム » the_tags()の表示順カスタマイズこちらを参考にさせていただきました。
ちなみに蛇足かもですが、リンク無しなら
略 $tags = wp_get_post_tags($post->ID,'fields=names'); $tags_list = ''; foreach($tags as $val) {$tags_list = $tags_list . $val . ' ';} 略 $temp = str_replace("%TAGS%", $tags_list , $temp); $output .= $temp;このように書けば良いかと思います。
コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)
YouTubeでQ&Aコンテンツを企画しています
運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。