[wordpress] Simple GA Rankingにサムネイルと抜粋を追加する方法

軽量な記事ランキング機能を追加できるSimple GA Rankingだが、デフォルトではサムネイルや抜粋が追加されないため、独自にサムネイルと抜粋(excerpt)を追加する方法は以下の通り

 

functions.phpに以下のコードを追加して、新しいウィジェットを追加

/**
 * 人気記事表示ウィジェット-ページランキングサムネイル表示
 **/
class Post_Rank_Disp_Widget extends WP_Widget {
 function __construct() {
 parent::__construct(
 false,
 $name = '人気記事表示ウィジェット', array( 'description' => 'googol GA Ranking 人気記事表示', )
 );
 }
 
 /* ウィジェットが呼ばれた際の表示処理を書く */
 function widget($args, $instance) {
 extract( $args );
 // タイトル名を取得
 $title = apply_filters( 'widget_title_new', empty( $instance['title_new'] ) ? '人気記事' : $instance['title_new'], $instance, $this->id_base );
 
 echo $before_widget;
 if ( $title )
 echo $before_title . $title . $after_title;
 
 // 表示数を取得
 $entry_count = apply_filters( 'widget_entry_count', $instance['entry_count'] );
 if ( !$entry_count ) $entry_count = 5; //表示数が設定されていない時は5にする
 ?>
 <div id="n-p-r">
 <?php
 if (function_exists('sga_ranking_get_date'))
 $ranking = sga_ranking_get_date();
 $args = array(
 'post__in' => $ranking,
 'posts_per_page' => $entry_count,
 'orderby' => 'post__in',
 'ignore_sticky_posts' => true,
 'post_type' => 'any',
// 'cat' => array( 除外したいカテゴリIDにマイナス記号をつけて),
 );
 $my_query = new WP_Query($args);
 
 if($my_query->have_posts()):
 while ($my_query->have_posts()) : $my_query->the_post();
 ?>
 
 <div class="n-p-r-card toc clearfix">
 <div class="term n-p-r-img"><a href="<?php the_permalink() ?>">
 <?php if ( has_post_thumbnail() ): // サムネイルを持っているときの処理 ?>
 <?php the_post_thumbnail( 'thumb100' ,array( 'alt' =>get_the_title())); ?>
 <?php else: // サムネイルを持っていないときの処理 ?>
 <img src="<?php echo get_template_directory_uri(); ?>/images/no-img.png" alt="<?php the_title(); ?>" width="100" height="100" />
 <?php endif; ?></div>
 <div class="n-p-r-titlea excerpt">
 <p class="n-p-r-title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p>
 <p class="n-p-r-excerpt"><?php echo apply_filters( 'thk_excerpt_no_break', 40 ); ?></p>
 </div>
 </div>
 <?php endwhile; endif; ?>
 <?php wp_reset_postdata(); ?>
 </div>
 <?php
 echo $after_widget;
 }
 
 /* 管理画面の設定とか表示用コードを書く */
 function form($instance) {
 if(empty($instance)) {
 $instance = array('title_new' => null, 'entry_count' => null);
 }
 $title_new = esc_attr($instance['title_new']);
 $entry_count = esc_attr($instance['entry_count']);
 ?>
 <?php //タイトル入力フォーム ?>
 <p>
 <label for="<?php echo $this->get_field_id('title_new'); ?>">
 <?php echo('人気記事ランキングのタイトル'); ?>
 </label>
 <input class="widefat" id="<?php echo $this->get_field_id('title_new'); ?>" name="<?php echo $this->get_field_name('title_new'); ?>" type="text" value="<?php echo $title_new; ?>" />
 </p>
 <?php //表示数入力フォーム ?>
 <p>
 <label for="<?php echo $this->get_field_id('entry_count'); ?>">
 <?php echo('表示数(半角数字、デフォルト:5)'); ?>
 </label>
 <input class="widefat" id="<?php echo $this->get_field_id('entry_count'); ?>" name="<?php echo $this->get_field_name('entry_count'); ?>" type="text" value="<?php echo $entry_count; ?>" />
 </p>
 <?php
 }
 
 /* 管理画面で設定を変更した時の処理を書く */
 function update($new_instance, $old_instance) {
 $instance = $old_instance;
 $instance['title_new'] = strip_tags($new_instance['title_new']);
 $instance['entry_count'] = strip_tags($new_instance['entry_count']);
 return $instance;
 }
}
add_action('widgets_init', function(){register_widget("Post_Rank_Disp_Widget");});
?>

CSSに以下のコードを追加

/************************************
** GA
************************************/
.n-p-r-img img{
 margin: 0 10px 0 0;
 padding: 1px;
}
.n-p-r-titlea {
}
.n-p-r-title {
font-weight: bold;
font-size: 1.35rem;
}
.n-p-r-excerpt {
font-size: 1.25rem;
}
.n-p-r-card {
 padding: 15px 0;
 border-bottom: 1px dotted #ccc;
}

コメントを残す

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