どうにもデータベースへの接続が悪いサイトがあって、なんでだろ?と思ってデータベースを覗いてみたら、かなり色々溜まってたので整理ついでにデータベースを使わない記事ランキングのウィジェットを作りました。
広告
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使ってる人にお勧め。
これは当テーマには入ってませんので、書きたい人は自分で書いて
おすすめのコンテンツ
広告