WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Самая быстрая Тема-конструктор для WordPress

Kama Postviews

Считает количество просмотров страницы и делает это через AJAX, но без использования среды WordPress, за счет чего нагрузка снижается в десятки раз!

Плагин рассчитан на работу совместно с плагинами страничного кэширования: WP Super Cache и ему подобным.

Позволяет получать записи по кол-ву просмотров и все что связано с просмотрами.

Считает просмотры не только для записей, а для абсолютно всех страниц на сайте: рубрики, произвольные таксономии, главная, 404 и т.д. Все это настраивается в админке.

Функции плагина

kpv_views()

Выводит кол-во просмотров поста или термина на экран.

<?php kpv_views( $id, $type ) ?>

Описание $id, $type — смотрите ниже.

get_kpv_views()

Тоже что и kpv_views(), только получает значение в переменную.

$views = get_kpv_views( $id, $type );

Описание $id, $type — смотрите ниже.

kpv_fresh_views()

Выводит количество просмотров и обновляет значение при просмотре (через AJAX). Это такая же функция что и: kpv_views(), get_kpv_views(), только предназначена для работы с плагинами страничного кэширования, например, «WP Super Cache». Оборачивает результат get_kpv_views() в тег <span class="ajax_views"> чтобы затем значение внутри этого тега обновлялось через AJAX.

<?php kpv_fresh_views( $id, $type ) ?>

Описание $id, $type — смотрите ниже.

get_kpv_fresh_views()

Тоже что и kpv_fresh_views(), только получает значение в переменную.

$views = get_kpv_fresh_views( $id, $type );
$id(число)
ID Записи (поста) или Термина (элемента таксономии).
По умолчанию: 0 (ID текущего поста или ID текущего термина)
$type(строка)

Тип переданного ID. Может быть:

  • term — для элементов таксономии
  • post — для записей

По умолчанию: '' (тип просматриваемой страницы)

Четыре функции выше работают на основе метаполей views и views_prev_month.

Другой вариант получить данные просмотров - это использовать базовые функций WP. Функции выше это обертка для этих функций, которая объединяет вывод всех просмотров и за месяц (если в настройках указано, что нужно также показывать данные за месяц).

// Записи
get_post_meta( $post_id, 'views', 1 );
get_post_meta( $post_id, 'views_prev_month', 1 );

// Элементы таксономий (термины)
get_term_meta( $term_id, 'views', 1 );
get_term_meta( $term_id, 'views_prev_month', 1 );
меню

kpv_get_popular_posts()

Получает объекты постов (объекты WP_Post) отсортированные по просмотрам. Работает на основе первичных данных из таблицы плагина.

Обёртка для функции kpv_get_viewed_objects(). Устанавливает дефолтные параметры и обрабатывает результат через get_posts() чтобы вернуть объекты постов WordPress.

Возвращает

Массив. Массив объектов WP_Post.

Использование
$posts = kpv_get_popular_posts( $args );
$args
Смотрите в описании kpv_get_viewed_objects().

kpv_get_popular_terms()

Получает объекты терминов (объекты WP_Term) отсортированные по просмотрам. Такая же как предыдущая, только работает с терминами.

Обёртка для функции kpv_get_viewed_objects().

Возвращает

Массив. Массив объектов WP_Term.

Использование
$terms = kpv_get_popular_terms( $args );
$args
Смотрите в описании kpv_get_viewed_objects().

kpv_get_viewed_objects()

Базовая функция для получения данных просмотров из таблицы плагина.

Возвращает

Массив. Массив объектов с id объекта (поста, термина и т.д.) и кол-во просмотров этого объекта за указанный период, день.

Array
	[37] => stdClass Object
			[obj_id] => 37
			[views] => 483

	[11] => stdClass Object
			[obj_id] => 11
			[views] => 465
Использование
$objects = kpv_get_viewed_objects( $args );
$args(массив)

Массив параметров:

/**
 * Получает самые просматриваемые записи (или другие типы) за указанный период времени и сортирует их по просмотрам.
 * В датах нужно передавать время в UTC (GMT), а не локальное время сайта.
 *
 * @param array $args {
 *     Масив или строка параметров.
 *
 *     @type string  $type       Тип получаемых данных. Может быть: post, term, front_page, search, 404, post_type_archive, year, month, day.
 *     @type string  $post_type  Название типа записи, если $type = post. По умолчанию: post.
 *     @type string  $taxonomy   Название таксономии, если $type = term. По умолчанию: category.
 *     @type array   $object_ids ID объектов (постов, терминов, юзеров) из которых нужно делать выборку.
 *     @type array   $exclude    ID объектов (постов, терминов, юзеров) которые нужно исключить из выборки.
 *     @type string  $for_range  Период за который нужно получить популярные посты. Формат: 2017-08-01,2017-09-16.
 *                               Если указать одну дату, то след. дата будет текущая.
 *                               Вместо любой даты можно указать относительный формат: http://de2.php.net/manual/ru/datetime.formats.relative.php
 *                               Примеры относительного формата:
 *                               'today', 'yesterday', '-2 day' или '2 days ago', '-2 month' или '2 months ago', 'first day of -2 month'.
 *                               Не обязательный. По умолчанию: ''
 *     @type string  $for_day    День за который нужно получить популярные объекты (посты, термины). Формат: 2017-08-01.
 *                               Можно указать относительный формат.
 *                               Не обязательный. По умолчанию: ''
 *     @type string  $for_month  Месяц за который нужно получить популярные объекты. Формат: 2017-08 или 2017-08-xx.
 *                               Можно указать относительный формат.
 *                               Не обязательный. По умолчанию: ''
 *     @type string  $limit      Сколько объектов получать. По умолчанию 20.
 *     @type string  $order      Как сортировать. По умолчанию DESC - популярные вверху.
 * }
 *
 * @return array  Массив с ключами [obj_id, views] или пустой массив, если не удалось получить результаты.
 */
$viewed_objects = kpv_get_viewed_objects( $args );

Все даты в таблице плагина ориентируются на UTC (GMT, гринвич) зону. Поэтому если нужно получать точные данные преобразовывайте передаваемые данные в GTM зону из локальной.

меню

Примеры

#1 Популярные записи за вчерашний день

Этот пример получает 10 самых популярных постов (записей типа post). 10 записей отсортированных по просмотрам за вчерашний день.

Чтобы получить популярные записи за период (например, за последнюю неделю), используйте параметр for_range вместо for_day.

<?php
global $post;

$posts = kpv_get_popular_posts([
	'post_type' => 'post',      // тип записи
	'for_day'   => 'yesterday', // за позавчера, пишем '-2 days'
	//'for_range' => '-7 days',   // за последние 7 дней (неделю)
	//'for_month' => '2017-08',   // за прошлый месяц, пишем '-31 day'
	'limit'     => 10,
]);

foreach( $posts as $post ){
	setup_postdata( $post );

	?>
	<h2><?php the_title() ?> ( <?php echo $post->views ?> )</h2>
	<?php
}

wp_reset_postdata();
меню

#2 Популярные термины за вчерашний день

Этот пример получает 10 самых популярных элементов таксономий таксономии my_tax. 10 терминов отсортированных по просмотрам за вчерашний день.

Чтобы данные за период (например, за последнюю неделю), используйте параметр for_range вместо for_day.

$terms = kpv_get_popular_terms([
	'taxonomy'  => 'category',
	'for_range'   => '-30 day', // за позавчера, пишем '-2 days'
	//'for_range' => '-7 days',   // за последние 7 дней (неделю)
	'limit'     => 10,
]);

foreach( $terms as $term ){
	echo "<h2>$term->term_id - ". esc_html($term->name) ."( $term->views )</h2>";
}

#3 Популярные посты из двух рубрик

Создать такой запрос через функцию kpv_get_popular_posts() не получится. Потому что она выводит популярные посты или термины по типу и за период времени. Запрос делается в основную таблицу данных плагина и в ней нет привязки к рубрикам. Теоретически можно объединить запросы с помощью JOIN и выйти на рубрики, но в этом случае SQL запрос получится довольно сложным.

Чтобы получить популярные посты из категорий, можно использовать базовый WP_Query запрос по метаданным и рубрикам. Для создания такого запроса нам нужно будет одно из двух метаполей поста:

  • views — хранится число всех просмотров.
  • views_prev_month — хранится число просмотров за предыдущий месяц.
$posts = get_posts([
	'post_type'      => 'post',
	'posts_per_page' => 10,
	'tax_query'      => [ 
		[
			'taxonomy' => 'category',
			'field'    => 'slug',
			'terms'    => [ 'codex', 'functions' ],
		],
	],
	'meta_query' => [
		'views_count' => [ 
			'key'  => 'views', // views, views_prev_month
			'type' => 'NUMERIC',
		],
	],
	'orderby'  => [ 'views_count'=>'DESC' ],
]);

global $post;
foreach( $posts as $post ){
	setup_postdata( $post );

	// тут вывод
	echo esc_html( get_the_title() ) .' - '. number_format( get_post_meta( $post->ID, 'views', 1 ) ) .'<br>';
}
wp_reset_postdata();
Комментариев нет