Как сделать счётчик просмотров статьёй?

Как сделать счётчик просмотров статьёй?
  • Вопрос задан
  • 108 просмотров
Пригласить эксперта
Ответы на вопрос 3
Я делал через куки на 1 час, чтобы не считать несколько раз.
Далее к каждой статье создается поле количества просмотров.
Если куки есть - пропускам, если нет - прибавляем 1.
Функция подсчета:
# Подсчет количества посещений страницы
function set_postviews() {

  $count_key    = 'post_views_count';  // Имя поля для записи количества просмотров
	$who_count    = 1;	// 0 - считать всех, 1 - только гостей, 2 - только зарегистрированных пользователей
	$exclude_bots = 1;	// 0 - считать всех, 1 - исключить из подсчета ботов

	global $user_ID, $post, $cookie_test;

	# Проверка, что не было просмотра страницы в течение часа
	if( is_singular() && $cookie_test) {

		$id = (int)$post->ID;
		static $post_views = false;
		if( $post_views ) return true; // чтобы 1 раз за поток

		$post_views = (int)get_post_meta( $id, $count_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;
		}

		# Проверка на браузер или не бот, иначе false
		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;
		}

		# Обновляем счетик, если поля нет, то создаем со значением 1
		if( $should_count )
			if( !update_post_meta( $id, $count_key, ($post_views+1)) ) add_post_meta( $id, $count_key, 1, true );
	}
	return true;
}
add_action('wp_head', 'set_postviews');


Куки так:
/*
* Создаем куки, чтобы дважды не считать один и тот же пост в течение 1 часа
*
*			в самое начало single.php пропишем:
*			<?php
*				global $cookie_test;
*				$cookie_test = false;
*
*				# Определяем имя файла (поста)
*				$url = parse_url($_SERVER['REQUEST_URI']);
*				$path = pathinfo($url['path']);
*				$basename = $path['basename'];
*
*				if( $basename && !isset($_COOKIE[$basename]) ) {
*					$cookie_test = true;
*					setcookie( $basename, '1', time()+3600 );
*				}
*			?>
**/
Ответ написан
OtshelnikFm
@OtshelnikFm Куратор тега WordPress
Обо мне расскажет yawncato.com
Плагин Top 10
Ответ написан
mihdan
@mihdan
WordPress-евангелист, ведущий РНР - разработчик
Возьмите плагин Pageviews от Pressjitsu. Быстро, удобно, понятно и не нагружает базу сайта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы