WordPress popular postの表示をカスタマイズする

閲覧数ランキングを簡単に表示できるプラグイン、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でカスタムフィールド値、タクソノミ(ターム値)を出力

コメントを残す

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

CAPTCHA


top