2014-09-04 2 views
2

Мне очень нравится иметь счетчик на моих блогах. Я заметил, что это действительно побуждает посетителей делиться самим контентом. Поскольку там нет плагинов sharepount WordPress, которые я на самом деле нахожу удовлетворительными (большинство из них способствуют большому количеству вызовов), я сам написал код.Кэширование пользовательских счет в социальных сетях WordPress

Он работает идеально, но все же замедляет мой сайт. Так что я предпочел бы кеши и обновления один раз в час или около того. Я не знаю, как управлять этим, хотя ... Любые идеи?

Это то, что я кладу в функции темы файла:

class shareCount { 
private $url,$timeout; 
function __construct($url,$timeout=10) { 
$this->url=rawurlencode($url); 
$this->timeout=$timeout; 
} 

function get_tweets() { 
$json_string = $this->file_get_contents_curl('http://urls.api.twitter.com/1/urls/count.json?url=' . $this->url); 
$json = json_decode($json_string, true); 
return isset($json['count'])?intval($json['count']):0; 
} 

function get_fb() { 
$json_string = $this->file_get_contents_curl('http://api.facebook.com/restserver.php?method=links.getStats&format=json&urls='.$this->url); 
$json = json_decode($json_string, true); 
return isset($json[0]['total_count'])?intval($json[0]['total_count']):0; 
} 

private function file_get_contents_curl($url){ 
$ch=curl_init(); 
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout); 
$cont = curl_exec($ch); 
if(curl_error($ch)) 
    { 
     die(curl_error($ch)); 
    } 
     return $cont; 
    } 

}

И это то, что я использую в single.php:

<!-- Begin mod: Add share counter --> 
<span class="share-count"> 
    <?php 
    $obj=new shareCount(get_permalink($post->ID)); 
    echo $obj->get_tweets() + $obj->get_fb(); 
    ?> 
</span> 
<span class="share-text"> 
    keer gedeeld 
</span> 
<!-- End mod: Add share counter --> 

Тогда я также добавить некоторые CSS.

+0

Вы можете взглянуть на API Transients, чтобы временно кэшировать подсчеты. См .: http://codex.wordpress.org/Transients_API – vicente

ответ

0

Как сказал вице-президент, вы должны использовать встроенный таймер.

private function file_get_contents_curl($url){ 
    // Create unique transient key 
    $transientKey = 'sc_' + md5($url); 

    // Check cache 
    $cache = get_transient($transientKey); 
    if($cache) { 
     return $cache; 
    } 

    $ch=curl_init(); 
    curl_setopt($ch, CURLOPT_URL, $url); 
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
    curl_setopt($ch, CURLOPT_FAILONERROR, 1); 
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
    curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout); 
    $cont = curl_exec($ch); 
    if(curl_error($ch)) 
    { 
     die(curl_error($ch)); 
    } 

    // Cache results for 1 hour 
    set_transient($transientKey, $cont, 60*60); 

    return $cont; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^