Intereting Posts

Кэширование пользовательской социальной доли в WordPress

Мне очень нравится иметь счетчик акций на моих блогах. Я заметил, что это действительно побуждает посетителей делиться самим контентом. Поскольку там нет плагинов sharepount 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.

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

 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; }