Если выбирать плагины для подсчета посещений, по наибольшей простоте, то wp-postviews пожалуй самое оно… Однако он не без недостатков — минус он рассчитан на мировой трафик и не учитывает ботов Яндекса.
В плагине есть настройки, где можно указать чьи визиты считать, логика мне всегда подсказывала, что надо считать визиты только гостей (не залогиненных пользователей) и исключить поисковых роботов/ботов. Принцип отсева поисковых ботов и роботов в плагине реализован немного не правильно, потому что он исключает визиты указанных ботов, а если бот не указан в списке, то он будет считаться посетителем, что создает необъективность подсчета. Я решил подойти с другой стороны — не исключать, кого не надо считать, а включить, кого надо считать, для этого просто указал идентификаторы браузеров. По-моему лучше пусть счетчик будет считать строго, но точно будет известно, что цифры «оставлены» реальными людьми, а не всякой нечистью вроде поисковых ботов.
// Подсчет количества посещений страниц
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 ); ?>