Включение вызовов Twitter / Flickr API на каждой странице загрузки (WordPress) - PullRequest
3 голосов
/ 30 апреля 2011

Я хочу включить свои последние фотографии с Flickr и обновления статуса Twitter в боковую панель или нижний колонтитул WordPress, используя запросы JSONP. Проблема, конечно, заключается в том, что каждая перезагрузка страницы будет выполнять новый вызов ajax, и я считаю, что API Twitter имеет ограничения на использование.

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

Сохранение результатов AJAX в cookie (установка срока действия на день, я не обновляю свой Twitter / Flickr так часто). быть лучшим решением для вызова API Twitter и Flickr на основе JavaScript?

Спасибо

1 Ответ

1 голос
/ 30 апреля 2011

Лучшее решение для вызовов API Twitter и Flickr на основе javascript при использовании WordPress - это использование WordPress Transient API .Transient API - это встроенный в WordPress метод постоянного кэширования, предназначенный для кэширования часто меняющихся элементов.Вы можете установить время истечения срока действия кэша, и WordPress сначала проверит базу данных на наличие переходного процесса, если он вернет false, он будет использовать вызов json для возврата элемента.пользователей самый последний твит.Код ниже взят из плагина Aaron Jorbin Twitter Transients

function twitter_status($atts){
    extract(shortcode_atts(array(
    'screenname' => '',
    'count' => 1
    ), $atts));
    $transient = "$screenname"."_$count"."_twitter_status";
    $statuses =  get_transient($transient);
    if ($statuses == true  )
    {
        return $statuses;
    }
    elseif ($screenname != false)
    {
        $site = "http://twitter.com/statuses/user_timeline.json?screen_name=$screenname&count=$count";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_URL, $site);
        $result = curl_exec($ch);
        $tweets = json_decode($result);
        ob_start();
        foreach ( (array) $tweets as $tweet){
            $tweetcontent = $tweet->text;
            $newcontent = preg_replace('%@([^\s]*)%', "<a href="http://twitter.com/\\1">@\\1</a>", $tweetcontent);
            echo "<div class="twitter_shortcode"><p>
            <img class="twitter_shortcode_image" src="&quot;.esc_url($tweet-&gt;user-&gt;profile_image_url).&quot;"><span class="twitter_shotcode_username"><a href="http://twitter.com/&quot;.$tweet-&gt;user-&gt;screen_name.&quot;">".$tweet-&gt;user-&gt;screen_name."</a>&nbsp;—&nbsp;</span>$newcontent</p>
            </div>";

        }
        $tweet_display = ob_get_clean();
        set_transient($transient, $tweet_display, 120);
        return $tweet_display;
    }
    else
    {
        return false;
    }
}

add_shortcode('twitter_status', 'twitter_status');
...