Вважаємо кількість відвідувань сторінок на WordPress без плагінів

Пам’ятаю в дитинстві місяцеходи розбирав, тепер розбираю плагіни для smileWordPress . Розбір вдався на славу: викинув близько 90% коду, тому що все це виявилося зайвим для мого завдання.

Цей код не підтримується!

Рекомендую свій плагін. В ньому:

  • Більше стабільний принцип підрахунку.
  • Підрахунок візитів для таксономій, головної, архівів.
  • Графік відвідувань (у тому числі унікальних).
  • Мінімум даних у БД (БД не зростатиме як на дріжджах, як в інших плагінах).
  • Підрахунок працює на аяксі і дуже швидко – WP середовище не підвантажується.
  • Розрахований працювати з плагінами об’єктного кешування.

Дивитися плагін

Єдине, що мені завжди треба було від цього плагіна — лише кількість відвідувань сторінок та записів. Маю на увазі, виводити записи з найбільшого відвідування не доводилося. До того ж, лічильник, який реалізований у плагіні заслабкий для об’єктивного підрахунку візитів та пропоновані плагіном функції виведення: найвідвідуваніші статті тощо. перетворюються на якусь марення. Число візитів, які вважає цей плагін – це лише загальне уявлення про відвідини сторінки.

Що ж до згаданого вище виведення постів з найбільшому відвідуванню, це можна зробити використовуючи функцію WordPress get_posts() .

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

Якщо вибирати плагіни для підрахунку відвідувань, за найбільшою простотою, то wp-postviews, мабуть, саме воно… Однак він не без недоліків — мінус він розрахований на світовий трафік і не враховує ботів Яндекса.

У плагіні є налаштування, де можна вказати чиї візити рахувати, логіка мені завжди підказувала, що треба рахувати візити лише гостей (не залогінених користувачів) та виключити пошукових роботів/ботів. Принцип відсіву пошукових роботів і роботів у плагіні реалізований трохи неправильно, тому що він виключає візити зазначених роботів, а якщо робот не вказаний у списку, то він вважатиметься відвідувачем, що створює необ’єктивність підрахунку. Я вирішив підійти з іншого боку – не виключати, кого не треба рахувати, а включити, кого треба рахувати, для цього просто вказав ідентифікатори браузерів. По-моєму краще нехай лічильник вважатиме суворо, але точно буде відомо, що цифри “залишені” реальними людьми, а не всякою нечистю на зразок пошукових ботів.smile

А ось і функція, яка у мене вийшла – функція для підрахунку відвідувань сторінок на WordPress.

// Підрахунок кількості відвідувань сторінок
add_action( 'wp_head', 'kama_postviews');

/**
 * @param array $args
 *
 * @return null
 */
function kama_postviews( $args = [] ){
	Global $user_ID, $post, $wpdb;

	if( ! $post || ! is_singular() )
		return;

	$rg = (object) wp_parse_args( $args, [
		// Ключ мета поля посту, куди записуватиметься кількість переглядів.
		'meta_key' => 'views',
		// Чиї відвідини рахувати? 0 - Усіх. 1 – Тільки гостей. 2 – Тільки зареєстрованих користувачів.
		'who_count' => 1,
		// Виключити роботів, роботів? 0 - ні, нехай теж рахуються. 1 - так, виключити з підрахунку.
		'exclude_bots' => true,
	]);

	$do_count = false;
	switch( $rg->who_count ){

		case 0:
			$do_count = true;
			break;
		case 1:
			if( ! $user_ID )
				$do_count = true;
			break;
		case 2:
			if( $user_ID )
				$do_count = true;
			break;
	}

	if( $do_count && $rg->exclude_bots ){

		$notbot = 'Mozilla|Opera'; // Chrome | Safari | Firefox | Netscape - всі рівні Mozilla
		$bot = 'Bot/|robot|Slurp/|yahoo';
		if(
			! preg_match( "/$notbot/i", $_SERVER['HTTP_USER_AGENT'] ) ||
			preg_match( "~$bot~i", $_SERVER['HTTP_USER_AGENT'] )
		) {
			$do_count = false;
		}

	}

	if( $do_count ){

		$up = $wpdb->query( $wpdb->prepare(
			"UPDATE $wpdb->postmeta SET meta_value = (meta_value+1) WHERE post_id = %d AND meta_key = %s",
			$post->ID, $rg->meta_key
		)));

		if( ! $up )
			add_post_meta($post->ID, $rg->meta_key, 1, true);

		wp_cache_delete($post->ID, 'post_meta');
	}

}

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

Переглядів: <?php echo get_post_meta( $post->ID, 'views', true ); ?>

Усередині функції є її налаштування: назва ключа у довільного поля, кого рахувати та виключити ботів чи ні.

Назва ключа потрібна для того, щоб можна було замінити, якийсь інший плагін, який також використовує довільні поля для запису відвідувань. Наприклад, якщо стояв плагін, який змінював довільне поле з назвою ‘ post_meta_name‘, то щоб його замінити потрібно змінити на ‘ post_meta_name‘змінну $meta_keyфункції і замінити ‘ views‘, при виведенні числа відвідувань:

Переглядів: <?php echo get_post_meta( $post->ID, 'post_meta_name', true ); ?>

Залишити коментар

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *