WordPress показать популярные посты на основе комментариев Facebook - PullRequest
3 голосов
/ 19 января 2012

Итак, я имею в виду показ списка самых популярных постов в зависимости от того, сколько комментариев в Facebook у них есть.Мне уже удалось создать функцию, которая подсчитывает на основе графика в Facebook количество комментариев к сообщению, но у меня проблема с запросом:

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>

Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 марта 2012

Возможно, вы захотите сохранить количество комментариев в опубликовать метаданные , чтобы позже вы могли использовать их для сортировки.

Кстати, ваша функция не будет работать из-за разницы в формате ответа, который вы используете, и реального ответа. (количество комментариев присутствует в response->comments->count, а не в response->comments). Также вы можете захотеть использовать fields=comments, чтобы ограничить ответ включением только подробностей о комментариях без всех остальных данных или использовать FQL-запрос для получения только количества комментариев:

SELECT commentsbox_count FROM link_stat WHERE url = 'POST_URL'

Поток, как я вижу, может быть таким:

  • Хранить количество комментариев в пост-мета
  • Обновление количества комментариев, вызывающих fb_comment_count после просмотра сообщения
  • Используйте query_posts с meta_key для изменения значений по умолчанию.
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);
  // ...
}

Как только ваши сообщения имеют facebook_comments_count meta , вы можете использовать query_posts в The Loop :

query_posts('posts_per_page=5&meta_key=facebook_comments_count&orderby=meta_value&order=DESC')
1 голос
/ 19 января 2012

Вы захотите добраться до HTTP GET до http://graph.facebook.com/comments?ids=, и он вернет объект со свойством данных.Это свойство данных будет массивом объектов комментариев (см. https://developers.facebook.com/docs/reference/api/Comment/)

Например:

http://graph.facebook.com/comments?ids=http://www.stackoverflow.com/

{
   "http://www.stackoverflow.com/": {
      "data": [
         {
            "id": "450042939888_21515527",
            "from": {
               "name": "Anidhya Ahuja",
               "id": "1172382999"
            },
            "message": "abc",
            "created_time": "2011-10-11T13:55:15+0000"
         },
         {
            "id": "450042939888_21515536",
            "from": {
               "name": "Anidhya Ahuja",
               "id": "1172382999"
            },
            "message": "wass",
            "created_time": "2011-10-11T13:55:48+0000"
         }
      ],
      "paging": {
         "next": "http://graph.facebook.com/comments?ids=http\u00253A\u00252F\u00252Fwww.stackoverflow.com\u00252F&limit=25&offset=25&__after_id=450042939888_21515536"
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...