Using stats_get_csv to return a list of popular posts by views with thumbnails

I recently learned that if you have WordPress.com Stats installed, you can take advantage of stats_get_csv() (Part of the WordPress.com Stats Plugin).

<?php if ( function_exists('stats_get_csv') && $top_posts = stats_get_csv('postviews', 'days=-1&limit=4') ) : ?>
    <ol>
<?php foreach ( $top_posts as $p ) : ?>
        <li><a href="<?php echo $p['post_permalink']; ?>"><?php echo $p['post_title']; ?></a></li>
<?php endforeach; ?>
    </ol>
<?php endif; ?>

That’s how I have my code set up now. The problem is that it shows pages as well as posts. Also, I want to add the featured thumbnail next to each item as well as an array of custom post types. Is this possible? If so, can someone help me out?

Related posts

Leave a Reply

3 comments

  1. The API returns the following columns when you query the postviews table:

    • date
    • post_id
    • post_title
    • post_permalink
    • views

    For my blog the post_id column was either empty or 0 (for the homepage). So unless you have good values there, you will have to work from the post_permalink value and determine whether it is a page or a post (via a query on the database or a regex on the URL?), and then query your database for the post thumbnail, because the WordPress.com stats API does not collect info on that.

  2. The WordPress.com Stats API does not currently offer a post_type filter. You can implement one yourself in one of a number of ways. The basic idea is to loop over the post_ids to figure out which ones have a post_type of post. In your loop you can use something like this:

    $post = get_post($p['post_id']);
    if ( !isset($post->post_type) || $post->post_type != 'post' )
        continue;
    if ( has_post_thumbnail( $post->ID ) )
        $thumbnail = get_the_post_thumbnail( $post->ID );
    else
        $thumbnail = '';