WordPress как на ладони
Наставник Трепачёв Д.П., phphtml.net wordpress jino

Считаем количество посещений страниц на WordPress без плагинов

Помню в детстве луноходы разбирал. Сегодня уже не разбираю, но «вредные» привычки остались — теперь разбираю плагины для WordPress smile

На этот раз разбирался с wp-postviews (плагин для подсчета посещений постов/страниц в WordPress). Разбор удался на славу - выкинул практически все, так как, для меня в этом плагине лишним оказалось около 90%.

Единственное, что мне всегда надо было от этого плагина — только число посещений страниц и записей. Имею ввиду, выводить записи по наибольшему посещению не приходилось. К тому же, счетчик, который реализован в плагине слабоват для объективного подсчета визитов и предлагаемые плагином функции вывода: самые посещаемые статьи и т.п. превращаются в какой-то бред. Число визитов, которые считает этот плагин — это лишь общее представление о посещении страницы.

Что касается упомянутого выше вывода постов по наибольшему посещению, то это можно сделать используя функцию WordPress get_posts().

Почему, как эталон я взял wp-postviews? Потому что, он один из самых простых в своем роде - для сравнения, альтернатива wp-postviews - плагин для WordPress WP-PostViews Plus - он более наворочен  - создает свою таблицу в БД, более мощное вычисление о посетителе (IP, Браузер и т.п.). По-моему такой функционал это уже лишнее... Мы же не статистику собираем все-таки, для этого есть аналитика от Google или Яндекс.

Если выбирать плагины для подсчета посещений, по наибольшей простоте, то wp-postviews пожалуй самое оно... Однако он не без недостатков — минус он рассчитан на мировой трафик и не учитывает ботов Яндекса.

В плагине есть настройки, где можно указать чьи визиты считать, логика мне всегда подсказывала, что надо считать визиты только гостей (не залогиненных пользователей) и исключить поисковых роботов/ботов. Принцип отсева поисковых ботов и роботов в плагине реализован немного не правильно, потому что он исключает визиты указанных ботов, а если бот не указан в списке, то он будет считаться посетителем, что создает необъективность подсчета. Я решил подойти с другой стороны - не исключать, кого не надо считать, а включить, кого надо считать, для этого просто указал идентификаторы браузеров. По-моему лучше пусть счетчик будет считать строго, но точно будет известно, что цифры "оставлены" реальными людьми, а не всякой нечистью вроде поисковых ботов. smile

А вот и функция, которая у меня получилась - функция для подсчета посещений страниц на WordPress.

/* Подсчет количества посещений страниц
---------------------------------------------------------- */
add_action('wp_head', 'kama_postviews');
function kama_postviews() {

/* ------------ Настройки -------------- */
$meta_key       = 'views';  // Ключ мета поля, куда будет записываться количество просмотров.
$who_count      = 1;            // Чьи посещения считать? 0 - Всех. 1 - Только гостей. 2 - Только зарегистрированных пользователей.
$exclude_bots   = 1;            // Исключить ботов, роботов, пауков и прочую нечесть :)? 0 - нет, пусть тоже считаются. 1 - да, исключить из подсчета.

global $user_ID, $post;
	if(is_singular()) {
		$id = (int)$post->ID;
		static $post_views = false;
		if($post_views) return true; // чтобы 1 раз за поток
		$post_views = (int)get_post_meta($id,$meta_key, true);
		$should_count = false;
		switch( (int)$who_count ) {
			case 0: $should_count = true;
				break;
			case 1:
				if( (int)$user_ID == 0 )
					$should_count = true;
				break;
			case 2:
				if( (int)$user_ID > 0 )
					$should_count = true;
				break;
		}
		if( (int)$exclude_bots==1 && $should_count ){
			$useragent = $_SERVER['HTTP_USER_AGENT'];
			$notbot = "Mozilla|Opera"; //Chrome|Safari|Firefox|Netscape - все равны Mozilla
			$bot = "Bot/|robot|Slurp/|yahoo"; //Яндекс иногда как Mozilla представляется
			if ( !preg_match("/$notbot/i", $useragent) || preg_match("!$bot!i", $useragent) )
				$should_count = false;
		}

		if($should_count)
			if( !update_post_meta($id, $meta_key, ($post_views+1)) ) add_post_meta($id, $meta_key, 1, true);
	}
	return true;
}

Как обычно, функцию вставляем в файл functions.php вашей темы (шаблона), а где нужно вывести число просмотров пишем так:

Просмотров: <?php echo get_post_meta ($post->ID,'views',true); ?>

Внутри функции есть её настройки: название ключа у произвольного поля, кого считать и исключить ботов или нет.

Название ключа нужно для того, чтобы можно было заменить, какой-нибудь другой плагин, который тоже использует произвольные поля для записи посещений. Например, если стоял плагин, который изменял произвольное поле с названием 'post_meta_name', то чтобы его заменить нужно изменить на 'post_meta_name' переменную $mata_key в функции и заменить  'views', при выводе числа посещений:

Просмотров: <?php echo get_post_meta ($post->ID,'post_meta_name',true); ?>

Если есть необходимость вывести список самых просматриваемых статей, то решение здесь.

Обновления

13 марта 2011
В некоторых случаях (по вине шаблонов или плагинов), за раз, вместо 1 просмотра, прибавлялось 2. Исправил, теперь такого быть не должно.

Плагин

Плагин предназначен для работы совместно с плагинами кэширования, типа Wp Super Cache. Все подсчеты работают через AJAX с константой SHORTINIT. А это значит, что при включенном кэше, будут отправляться запросы, но не такие тяжелые и нагрузка будет низкая.

Для WordPress 4.4 и выше посещения элементов таксономии также считаются.

Скачать: kama-postviews-v2.0
Скачано: 1537, размер: 20.6 KB, дата: 1.1 года назад

Другие плагины

Pageviews - еще один неплохой плагин для подсчета визитов. Коротко о принципе работы: все подсчеты ведутся на удаленном сервере (сервисе) https://pv.pjtsu.com/, и благодаря этому на ваш сайт нет никакой нагрузки. Плагин работает со страничными плагинами кэширования.

Продвижение по низкочастотным запросам

Продвижение по низкочастотным запросам в СПб.

www.kreazone.ru

Считаем количество посещений страниц на WordPress без плагинов 302 комментария
Полезные 3 Вопросы 10 Все
  • @

    Тимур, так как лучше - вставить код в functions.php или же плагин установить ваш?

    Ответить3 месяца назад #
    • @

      А как посоветуете отслеживать кол-во просмотров за день?

      Ответить3 месяца назад #
      • Kama4452

        У меня плагин есть для этого, но его нужно дорабатывать, все никак руки не дойдут. Напиши в личку, если интересна покупка такого плагина. Плагин уже работает, только нужно добавить всяких плюшек функции вывода и прочее. Собственно до этого руки и не доходят...

        Ответить3 месяца назад #
        1
  • Alx

    На странице категории, при ajax-запросе, сначала показывается значение просмотров записи, но потом значение меняется на значение просмотров текyщей категории, не знаю в чём проблема. В запросе стоит тип post.

    Ответить3 месяца назад #
  • selftrips.ru cайт: selftrips.ru
    @

    А почему вы не хотите разместить ваш плагин в репозитарии wp?

    Ответить3 месяца назад #
    • selftrips.ru cайт: selftrips.ru
      @

      Еще вопрос.
      Немного не понял. В исходном плагине чтобы вывести количество просмотров страницы надо использовать the_views().
      Что надо в вашем решении использовать, при условии кэширования страницы wp-super-cache?
      Спасибо

      Ответить3 месяца назад #
  • Морис

    Здравствуйте. Плагином не пользовался, но решение почему то не работает. Тема Parabola, с маленькими изменениями сделанными в дочерней теме. На других моих сайтах работало, поэтому думаю связано с темой

    Ответить3 месяца назад #
    • Морис

      Правильно все таки пишут многие блоггеры. Нужно сначала читать комментарии к таким записям. В них содержится очень много полезной инфы. Думал функция не работает, оказалось просто она не показывает 0 просмотров smile Еще раз спасибо Тимур! Несколько твоих решений использую на своих сайтах.

      Ответить3 месяца назад #
      1
  • Вова cайт: www.howotomake.com.ua

    Привет, короче эту функцию юзаю давно спс)
    с ней такая вот беда есть: у "стихийных постов" когда сразу много посещений ну допустим 1-10к просмотров за час и случаем зашел редактировать пост и обновил то все эти быстрые просмотры слетают.. как вариант я думал уже создать какую-то опцию в бд которая будет хранить к-во просмотров независя от самого поста
    или как думаешь это лучше реализовать?

    Ответить2 месяца назад #
  • Павел cайт: livinfo.ru

    Здравствуйте, код прикольный и работает. Большое спасибо, а можно каким-то образом сделать чтобы счетчик не считал при каждом последующем обновлении странички? Буду очень благодарен за помощь.

    Ответить2 месяца назад #
  • Олег cайт: obvm.ru
    @

    Здравствуйте! Поставил ваш плагин, некоторое время прекрасно работал, но в один момент перестал считать. Установлены WP Super Cache, Autoptimize, All In One WP Security и JetPack. Самописная тема. Посоветуйте на что обратить внимание.

    Ответить2 месяца назад #
    • Kama4452

      Из за WP Super Cache... У меня есть платная версия, если интересно в личку напиши...

      Ответить2 месяца назад #
      • Олег cайт: obvm.ru
        @

        Тоже грешил на него, но после отключения ничего не изменилось. Интересно вот что: на какую бы страницу не зашёл, посещение засчитывается для этой - http://obvm.ru/darksiders-3-anons/

        Ответить2 месяца назад #
        • Kama4452

          Переменная $post сбивается где-то... Решение я выше написал...

          Ответить2 месяца назад #
          1
          • Олег cайт: obvm.ru
            @

            Мой косяк был, забыл про

             <?php wp_reset_postdata(); ?>

            Спасибо что подсказал куда смотреть)

            Ответить2 месяца назад #
  • elephant1 cайт: work-click.ru
    @

    Спасибо, функция работает! Не пойму, какой таблице БД хранятся данные метаполей?! dash

    Ответитьмесяц назад #
    • Kama4452

      wp_postmeta

      Ответитьмесяц назад #
      • elephant1 cайт: work-click.ru
        @

        По названию таблиц можно догадаться какие отвечают за мета данные, но с ключом views нигде нет.

        Ответитьмесяц назад #
        • Kama4452

          views - это не таблица, а строка в таблице... В wp_postmeta по meta_key=views ищи строку

          Ответитьмесяц назад #
          • elephant1 cайт: work-click.ru
            @

            нету https://prnt.sc/fgwa2w unknw, не особо конечно важно, но все же ...

            Ответитьмесяц назад #
            • campusboy1709 cайт: wp-plus.ru
              @

              Ну там как бы много строк в таблице, а отображаются лишь 20 по умолчанию. Вот в 20 строках такого нет. Но это не значит, что их нет в целой таблице.

              Ответитьмесяц назад #
              1
  • Дмитрий

    Подскажите, а как можно посчитать суточные просмотры всех страниц и вывести например на главной странице?

    Ответить8 дней назад #
    • Kama4452

      С этим кодом никак. У меня есть плагин, платный, если интересно стукни в личку.

      Ответить7 дней назад #

Здравствуйте, !

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