2

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?

3
  • Please share of which software the function stats_get_csv() is part of. That will help others to answer your question.
    – hakre
    Commented Mar 16, 2011 at 11:36
  • @hakre I believe it's WP.com Stats - wordpress.org/extend/plugins/stats Commented Mar 16, 2011 at 15:27
  • Yes, it is the Wordpress.com Stats plugin.
    – jwp
    Commented Mar 16, 2011 at 17:05

3 Answers 3

3

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 = '';
1

As to the excluding pages, if you have only a few pages, you can do it as described here:

Inside your foreach loop, before the <li> add:

 $postTitle = $single_post['post_title'];
    if($postTitle == 'Home page') {

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.