どうにもデータベースへの接続が悪いサイトがあって、なんでだろ?と思ってデータベースを覗いてみたら、かなり色々溜まってたので整理ついでにデータベースを使わない記事ランキングのウィジェットを作りました。
広告
Jetpack for WordPress の統計情報からランキングウィジェットを作る
いきなりですが、コードはこんな感じ。
class My_Widget2 extends WP_Widget {
function __construct() {
$widget_ops = array('description' => 'ランキング記事');
parent::__construct(
false,
'ランキング記事',
$widget_ops
);
}
function widget($args, $instance) {
?>
<?php $top_posts = stats_get_csv('postviews', "days=3&limit=7"); ?>
<?php if ( $top_posts ) : ?>
<h3 class="ranking">記事ランキング</h3>
<ul class="ranking-list">
<?php foreach($top_posts as $post): ?>
<?php $post_obj = get_post($post['post_id']);
$npid = get_the_ID(); ?>
<?php if (isset($post_obj) && $post_obj->ID != $npid): ?>
<li>
<a href="<?php echo get_permalink( $post_obj->ID ); ?>">
<?php if( has_post_thumbnail($post_obj->ID)) : ?>
<?php
$image_id = get_post_thumbnail_id($post_obj->ID);
$image_url = wp_get_attachment_image_src($image_id, true);
?>
<span class="ranking-box" style="background:url(<?php echo $image_url[0]; ?>) no-repeat 50% 50% / auto 100%;"></span>
<?php else: ?>
<span class="ranking-box" style="background:url(http://threelegs.jp.net/wordpress/wp-content/uploads/2014/05/torisukiu1.png) no-repeat 50% 50% / auto 100%;"></span>
<?php endif; ?>
<h2><?php echo get_the_title( $post_obj->ID ); ?></h2>
</a>
</li>
<?php endif; ?>
<?php endforeach; wp_reset_postdata(); ?>
</ul>
<?php endif; ?>
<?php
}
function update($new_instance, $old_instance) {
return $new_instance;
}
function form($instance) {
}
}
add_action('widgets_init',create_function('', 'return register_widget("My_Widget2");'));
ちょっと雑に書きました。スイマセン。
簡単に説明すると、ジェットパックのデータから情報を取得して配置するだけですw
強いて言えば、出力したときの投稿記事とかぶる記事は省くようにifで条件付けます。
人気のあるポピュラーポストでも良かったんですが、どうにかデータベースを軽くして原因を探りたかったのでこーゆーの作りました。jetpack使ってる人にお勧め。
これは当テーマには入ってませんので、書きたい人は自分で書いて
おすすめのコンテンツ
広告
