Выводим число фолловеров на WordPress текстом без плагинов и без JavaScript
Когда-то у меня стояла задача — выводить на блоге количество RSS-подписчиков текстом (по данным сервиса FeedBurner). С этой задачей и по сей день прекрасно справляется плагин FeedBurnerCount, отличительной особенностью которого является то, что он никогда не покажет 0 или N/А (т.е. не определено). Если при попытке обновить число он не может достучаться до FeedBurner, то показывает предыдущее сохраненное в БД значение.
Так вот, не так давно я возжелал реализовать аналогичную вещь с Твиттером,
Мне попадалось множество примеров вывода количества фолловеров в Твиттере — и в виде JavaScript, и в виде плагинов для WordPress, но мне был нужен более простой способ — только PHP и без всяких плагинов.
Естественно, я погуглил в поисках решения и погуглил успешно — нашел небольшую PHP-функцию, которая поставленную мною задачу решает на все 100%.
Я немного ее доработал и кроме этого добавил функцию склонения слов после числительных. Ниже представлен получившийся код. В результате его выполнения выводится текст вида: 1372 фолловера
.
Код функции
Выглядит она следующим образом:
function twitter_followers($account) {
function plural_form($number, $after) {
$cases = array (2, 0, 1, 1, 1, 2);
echo '<span class="count">'.$number.'</span> '.$after[ ($number%100>4 && $number%100<20)? 2: $cases[min($number%10, 5)] ];
}
$tw = get_option("twitterfollowers");
if (!isset($tw['lastcheck'])) $tw['lastcheck'] = 0;
if (!isset($tw['count'])) $tw['count'] = 0;
if (!isset($tw['account'])) $tw['account'] = '';
if ($tw['lastcheck'] < (mktime() - 3600) || $tw['account'] != $account) {
$url = 'https://api.twitter.com/1/users/show.xml?screen_name='.$account;
$headers = get_headers($url);
if(strpos($headers[0], '200')) {
$xml = file_get_contents($url);
preg_match('/followers_count>(.*)</', $xml, $match);
if ($match[1] !=0 ) {
$tw['count'] = $match[1];
$tw['lastcheck'] = mktime();
$tw['account'] = $account;
update_option("twitterfollowers",$tw);
}
}
}
plural_form(
$tw['count'],
/* варианты написания для количества 1, 2 и 5 */
array('фолловер','фолловера','фолловеров')
);
}
Данный код необходимо вставить в файл functions.php вашего WordPress-шаблона.
Число 3600
— это время в секундах, через которое следует проверять количество фолловеров. В данном случае это 1 час (3600 / 60 сек = 60 мин).
Чтобы непосредственно на сайте отобразить число фолловеров, вставьте в соответствующее место шаблона следующий код:
<?php twitter_followers('Dimox_ru'); ?>
и вместо Dimox_ru
укажите имя своего аккаунта в Твиттере.
Скрипт работает следующим образом — через заданный промежуток времени он обращается к xml-данным вашего Твиттер-аккаунта и парсит число из тега <followers_count>
. Если Твиттер ответил на запрос, то в базу данных WordPress это число записывается в виде опции «twitterfollowers». Если же по какой-то причине Твиттер не ответил на запрос, то в этой опции остается предыдущее удачно сохраненное число.
Как обычно, я предполагаю, что может существовать и более изящное решение, но то, что я предлагаю, прекрасно работает и полностью меня устраивает, поэтому вы тоже можете его использовать.
Ну, а, собственно, результат применения функции на данном блоге вы можете наблюдать в сайбаре во вкладке «Twitter».
* * *
Учебный центр «Эдукор» проводит курсы интернет маркетинга, по окончании которых выдается диплом. Вы можете пройти обучение по одному из следующих курсов: поисковая оптимизация (SEO курс), контекстная реклама (PPC курс), продвижения англоязычных сайтов, веб-аналитика.
Комментарии (52)
Спасибо за нужный код.
Не пойму почему, но вылетает ошибка (сайт online4biznes.ru):
Fatal error: Cannot redeclare plural_form ()
с rss подписками все отлично работает
Это потому, что коде для RSS и для Твиттера используется дублирующаяся функция
plural_form ()
. Если ее дубликат удалить, то проблема исчезнет.Спасибо что разъяснили!
А где в коде видно, что пишется значение в базу? Да и изредка бывает, что в месте вывода значения выдается ошибка с указание пути до functions. php (точный текст не помню). Как-то можно ее исправить?
Вот эта строка сохраняет в БД:
А что за ошибка?
Точный текст не помню, поэтому лучше не буду врать. Если еще раз появится, то сразу сюда напишу
Спасибо за способ. Только вот какое дело получается. Вывести число подписчиков на FeedBurner у меня получилось, и даже придать ему вид красивый, тоже по Вашему способу. А вот число читателей Твиттер никак не хочет появляться. Более того когда вставляю предложенный код в function. php и в последующем в сайдбар строчку, которая должна выводить этих самых читателей, то сайдбар «плывет». Это если ставлю эту запись самой последней. А если ставлю в самом верху, то ни её ни всех «нижестоящих» виджетов не видно. В чем может быть проблемка? Без Вас не разберусь… :-(
Не представляю, в чем дело.
Да, не обладаю я пока лаконичностью речи. В общем почему-то счетчик Фидбернера работает, а Твиттер не хочет. Может быть что-то у меня в function. php не так? Может какие то функции конфликтуют друг с другом? Опять же Фидбернер при этом работает как часики. Думала проблемы с плагинами php-виджетов. Перепробовала штук 5 — картина такая же. Вот и странно, что одна функция работает, а другая, почти идентичная, нет ((((. Думала Вы поможете, придется искать что-то другое. Просто в последнюю неделю заметила, что плагин Simple Counters перестал правильно отображать число подписчиков Твиттера. Вот и стала искать другое решение.
Здравствуйте. Проблемка была в том, что было 2 функции plural_form () — поняла из комментария выше. Видимо, добавляла её раньше, чтобы правильно склонялись слова после числительных. Убрала, все стало красиво. Но уже несколько дней на счетчике «0 фолловеров». Может данная функция уже «не дружит» с Твиттером и он не отвечает на запросы? Проверила Ваши данные — тоже расходятся. У Вас на сайте в счетчике 2854, а на сайте Твиттера — 2864. Может в функции что-то поменять, чтобы выдавала правильное число?
Да, Вы правы. У Твиттера произошли изменения. Внес правки в функцию, теперь она снова работает.
Сразу вспомнила кота Матроскина: «УРРРРААААА… Заработало!!!» Спасибо, что уделили внимание моей маленькой проблемке!
(нижнее подчеркивание убрать)
Я как-то и не обратил внимание, что счетчик завис)
Спасибо за большое количество полезных кодов!
Твиттер снова сменил API и больше не поддерживает xml, у вас, по-моему, тоже неверно счетчик отображается.
Да, это уже давненько. Я у себя вообще фиксированным числом указал.
Добрый вечер. есть проблема, выводит почему-то цифру 0 постоянно, хотя подписчиков далеко не 0. в чем можт быть проблема?
Код уже не рабочий, за 4 года в Твиттере многое изменилось.