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!
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:
fb_comment_count
once post is viewedquery_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')