Как вывести статистику просмотров страницы на WordPress без плагина. Пользовательская функция.

Posted by

Часто так бывает, что необходимо вывеси статистику просмотров страницы. Есть несколько способов как это сделать:

1. искать плагин

2. позаимствовать функцию у коллег.

Способ 2 выглядит проще. Я позаимствовал эту функцию на известном сайте  http://wp-kama.ru/, ну а вы же можете её позаимствовать у меня( !я ж не жадный). Плюс к этому коду пришлось дописать свою функцию для вывода количества просмотров, ведь согласитесь, как-то неудобно писать ещё пару строчек кода чтоб вывести статистику просмотров страницы.

Вам нужно вставить этот код в functions.php вашей темы. А в том месте где нужно вывести статистику просмотров сделать вставку типа: <?php count_views(); ?>

/* Подсчет количества посещений страниц
---------------------------------------------------------- */
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;
}

/**
 * функция выводит или возвращает к-во просмотров статьи
 * @param  integer $post_id - id записи, в цикле можно не передавать
 * @param  boolean $show    - вывести или возвратить
 * @return int           - к-во просмотров
 */
function count_views($post_id=0,$show=true){
	global $post;
	$post_id=empty($post_id)?$post->ID:(int)$post_id;
	$views=get_post_meta($post_id,'views',1);
	$views=empty($views)?0:$views;
	if($show){
		echo $views;
	}else{
		return $views;
	}
}
Поделиться:
Підписатися
Сповістити про
0 Ваш коментар
Вбудовані Відгуки
Переглянути всі коментарі