Search code examples
wordpressfacebook-graph-apifacebook-comments

wordpress show popular posts based on facebook comments


So what i have in mind is showing a list with most popular posts based on how many facebook comments they have. I already managed to make a function that counts based facebook graph how many comments a post has, but i am having problem with the query:

function fb_comment_count() {
global $post;
$url = get_permalink($post->ID);

$filecontent = file_get_contents('http://graph.facebook.com/?ids=' . $url);
$json = json_decode($filecontent);
$count = $json->$url->comments;
if ($count == 0 || !isset($count)) {
    $count = 0;
} ?>

<?php if ($count == 0) { ?>
         <span>No comment</span>
<?php } elseif ($count == 1) { ?>
         <span>One Comment</span>
<?php } elseif ($count > 1 ) { ?>
         <span><?php echo $count; ?> Comments</span>

Thanks!


Solution

  • You may want to store number of comments to post meta-data so you'll be able to use it for sorting later.

    BTW, your function will not work due to difference in response format you use and the real response. (number of comments is present in response->comments->count and not in response->comments). Also you may wish to use fields=comments to limit the response to only include details about comments without all the rest of data or using FQL query to retrieve only count of comments:

    SELECT commentsbox_count FROM link_stat WHERE url = 'POST_URL'
    

    The flow as I see it may be so:

    • Store number of comments within post-meta
    • Update number of comments calling fb_comment_count once post is viewed
    • Use query_posts with meta_key to change the defaults.
    function fb_comment_count() {
      global $post;
      $url = get_permalink($post->ID);
    
      $query = "SELECT commentsbox_count FROM link_stat WHERE url = '{$url}'";
      $responseText = file_get_contents('https://graph.facebook.com/fql?q='.$query);
      $responseJson = json_decode($responseText);
    
      $commenteCount = $responseJson->data->commentsbox_count;
      update_post_meta($post->ID, 'facebook_comments_count, $commenteCount);
      // ...
    }
    

    Once your posts have facebook_comments_count meta you can use query_posts in The Loop:

    query_posts('posts_per_page=5&meta_key=facebook_comments_count&orderby=meta_value&order=DESC')