閲覧数ランキングを簡単に表示できるプラグイン、wordpress popular post。
簡単な設定でサイドバーにランキングを表示できますが、
私がしたかったのは、カスタムタクソノミーの「ランキング」にチェックをいれた投稿だけ表示、
そしてタイトル等と一緒に、先程のタクソノミーとは別で設定したタームを表示したい。
functions.phpで表示方法を追記、
テンプレートloop-rank.phpを作成、
ウィジェットでショートコードが使えるようにして、テンプレートを読み込ませました。
//ウィジェットでショートコード使用 add_filter('widget_text', 'do_shortcode' ); //サイドバーの記事ランキング function my_custom_single_popular_post( $post_html, $p, $instance ) { $thumbnail_id = get_post_thumbnail_id( $p->id ); //アイキャッチを投稿IDから取得 $thumbnail_img = wp_get_attachment_image_src( $thumbnail_id, 'thumbnail' ); //アイキャッチ取得 $custom_cat = get_the_term_list( $p->id, 'post_genre', '<li>','</li><li>','</li>' ); //タクソノミー「post_genre」のタームをリンク付で取得 $custom_id = $p->id; //投稿IDの取得 //投稿タイトルを20文字まで取得して「...」をつなげる、20文字以内なら「...」をつけない if(mb_strlen($p->title, 'UTF-8')>20){ $title= mb_substr(strip_tags($p->title), 0, 20, 'UTF-8'); $title = $title.'...'; }else{ $title = strip_tags($p->title); } //表示 $output = '<li class="loop-side"> <div class="img-area"> <a href="'.get_the_permalink($p->id).'"><img src="'.$thumbnail_img[0].'" title="'.esc_attr($p->title).'"></a> </div> <div class="text-area"> <h4 class="loop-title"><a href="'.get_the_permalink($p->id).'">'.$title.'</a></h4> <ul class="post-genre">'.$custom_cat.'</ul> </div> </li>'; return $output; } add_filter( 'wpp_post', 'my_custom_single_popular_post', 10,3 );
<?php if( function_exists( 'wpp_get_mostpopular' ) ){ $args = array( 'range' => 'monthly', //月間のランキング 'limit' => '5', //トップ5件を取得 'taxonomy' => 'term_id' => '23', //タクソノミー「post_cat」のタームID23の記事のみ取得 'order_by' => 'views', //閲覧数順 'stats_views' => '0', 'post_type' => 'post', //投稿タイプ 'wpp_start' => '<ul class="loop-area loop-rank">', //コードの最初に表示するタグ 'wpp_end' => '</ul>' //コードの最後に表示するタグ ); wpp_get_mostpopular($args); } ?>
参考にさせていただいたのはこちらのサイトです。
Popular Postsでカスタムフィールド値、タクソノミ(ターム値)を出力