На сайте WordPress в файле functions.php (папка шаблона) установлен следующий код для сбора и публикации количества репостов записей в Facebook (share count):
===
/**
* Display number of shares using WordPress HTTP API
*
* @param integer $post_id We want to get number of shares of the post with this ID
*/
function get_fb( $post_id ) {
$cache_key = 'XXX1' . $post_id;
$access_token = 'XXX2|XXX3';
$count = get_transient( $cache_key ); // try to get value from WordPress cache
// if no value in the cache
if ( $count === false ) {
$response = wp_remote_get('
. urlencode( get_permalink( $post_id ) ) . '&fields=engagement&access_token=' . $access_token );
$body = json_decode( $response['body'] );
//print_r($body);
$count = intval( $body->engagement->reaction_count + $body->engagement->comment_count + $body->engagement->share_count + $body->engagement->comment_plugin_count );
set_transient( $cache_key, $count, 25200 ); // каждые 7 часов
}
return $count;
}
}
===
В последнее время Facebook ввёл жёсткие лимиты и периодически возвращает запрос ошибкой:
===
{
"error": {
"message": "(#613) Calls to graph_url_engagement_count have exceeded the rate of 10 calls per 3600 seconds.",
"type": "OAuthException",
"code": 613,
"fbtrace_id": "Ahx7qH2xi81zSujRryVoFmi"
}
}
===
Внесение изменений в эту сторку не помогает:
set_transient( $cache_key, $count, 25200 ); // каждые 7 часов
Соответственно, нужно внести изменение в код, чтобы в случае ошибки Facebook он показывал последнее количество репостов из кэша, а если их ещё не было, то 0.