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

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

WordPress Popular Postsというプラグインを使って、サイドバーと記事終わりに人気記事を表示していたのですが、ちょっと思わしくなくなっちゃったのでWP-PostViewsというプラグインで同じ事ができないか試してみました。


WordPress Popular Postsにて

こんなレイアウトにしてました

130621-1

これが、どうにももうちょい理想に届かなかった…!

WP-PostViewsにて

こちらのプラグインで同じレイアウトに挑戦!

こちらにあるとおり、WP-PostViewsは有効化するだけでカスタムフィールドにPVを記録していってくれるので、それを利用すればかんたんです!

現在のカテゴリの人気記事

130621-5

出来上がりはこんなイメージ。

$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は先程のこちらをそのまま。

他カテゴリの人気記事

130621-6

出来上がりはこんなイメージ。

最初、現在のカテゴリ以外のカテゴリ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で書いてあげれば良いだけ! こんなに簡単に出来るんですね…(*´ω`*)

公開日:2013/06/21
更新日:2014/05/07

2件のコメント

  1. bum より:

    大変参考になりました。
    よろしければ教えていただきたいのですが、
    サムネイルと記事タイトルに加え、記事に設定したタグ名を表示するにはwp-postviews.phpにどんな記述を加えればよいのでしょうか?

    • *you より:

      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()を使って指定記事のタグ情報を配列に格納して、nameslugを取り出してリンクの形に生成して出力、という形にしています。

      • 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;
      

      このように書けば良いかと思います。


bum へ返信する コメントをキャンセル

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

コメントは承認制ですので、反映までしばらくお待ち下さい。(稀にスパムの誤判定にて届かないこともあるようですので、必要な際はお問い合わせからお願い致します。)

YouTubeでQ&Aコンテンツを企画しています

運営しているYouTubeチャンネルで、ご相談やご質問を募集しています。動画のコメントやお問い合わせページからお気軽にご相談をお寄せください。