Выводим число фолловеров на WordPress текстом без плагинов и без JavaScript

Выводим число фолловеров на 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)
  1. 1

    Спасибо за нужный код.
    Не пойму почему, но вылетает ошибка (сайт online4biznes.ru):
    Fatal error: Cannot redeclare plural_form()
    с rss подписками все отлично работает

  2. 4
    Дмитрий

    А где в коде видно, что пишется значение в базу? Да и изредка бывает, что в месте вывода значения выдается ошибка с указание пути до functions.php (точный текст не помню). Как-то можно ее исправить?

  3. 7

    Спасибо за способ. Только вот какое дело получается. Вывести число подписчиков на FeedBurner у меня получилось, и даже придать ему вид красивый, тоже по Вашему способу. А вот число читателей Твиттер никак не хочет появляться. Более того когда вставляю предложенный код в function.php и в последующем в сайдбар строчку, которая должна выводить этих самых читателей, то сайдбар «плывет». Это если ставлю эту запись самой последней. А если ставлю в самом верху, то ни её ни всех «нижестоящих» виджетов не видно. В чем может быть проблемка? Без Вас не разберусь…. :-(

      • 9

        Да, не обладаю я пока лаконичностью речи. В общем почему-то счетчик Фидбернера работает, а Твиттер не хочет. Может быть что-то у меня в function.php не так? Может какие то функции конфликтуют друг с другом? Опять же Фидбернер при этом работает как часики. Думала проблемы с плагинами php-виджетов. Перепробовала штук 5 — картина такая же. Вот и странно, что одна функция работает, а другая, почти идентичная, нет (((( . Думала Вы поможете, придется искать что-то другое. Просто в последнюю неделю заметила, что плагин Simple Counters перестал правильно отображать число подписчиков Твиттера. Вот и стала искать другое решение.

        • 10

          Здравствуйте. Проблемка была в том, что было 2 функции plural_form() — поняла из комментария выше. Видимо, добавляла её раньше, чтобы правильно склонялись слова после числительных. Убрала, все стало красиво. Но уже несколько дней на счетчике «0 фолловеров». Может данная функция уже «не дружит» с Твиттером и он не отвечает на запросы? Проверила Ваши данные — тоже расходятся. У Вас на сайте в счетчике 2854, а на сайте Твиттера — 2864. Может в функции что-то поменять, чтобы выдавала правильное число?

  4. 14

    Твиттер снова сменил API и больше не поддерживает xml, у вас, по-моему, тоже неверно счетчик отображается.

  5. 16
    Дмитрий

    Добрый вечер. есть проблема, выводит почему то цифру 0 постоянно, хотя подписчиков далеко не 0. в чем можт быть проблема?

Ваш комментарий