Commit 1458d4e6 authored by Vadim's avatar Vadim

Version 1.2

1. Разрешены пользовательские типы постов 2. Виджет Общего количества онлайн-посетителей на сайте и просмотров всех страниц
parent e810c523
......@@ -22,6 +22,9 @@
Для вставки HTML-кода на страницу используйте шорт-код `[bg_counter type='post' id='1234' now='true']` или php-функцию `bg_az_counter_views ($type, $id, $now);` в шаблоне записи (поста).
Параметры ***type*** и ***ID*** описаны выше, если задан параметр ***now*** с значением ***true*** (или любое значение кроме null, false, 0, ""), то будут отображаться количество пользователей, просматривающих в данный момент страницу и общее количество просмотров страницы.
Если параметры ***type*** и/или ***ID*** не заданы или заданы пустые значения, то будет выведено общее количество просмотров и онлайн-посетителей на сайте.
В случае ***now=false** (или 0, "") - только общее количество просмотров страницы.
Если этот параметр не задан (или задан как ***now=null***), то используется значение, заданное в настройках плагина.
......@@ -69,6 +72,7 @@
```
Для вывода списка популярных постов в боковую панель используйте **виджет "Популярные записи"**, который работает аналогично соответствующему шорт-коду.
**Виджет "Сейчас на сайте"**, выводит в боковую панель количество онлайн-посетителей на сайте и общее количество просмотров странц.
Плагин позволяет загрузить на сервер данные из плагинов **Post Views Counter** и/или **WP Popular Posts**, а также из произвольных полей **"views"**.
Кроме того плагин ежедневно сохраняет архив данных в файле `wp-content/uploads/bg_az_counter.json`, которые при необходимости можно также загрузить на сервер.
......
......@@ -3,7 +3,7 @@
Plugin Name: Bg Az-Counter
Plugin URI: https://bogaiskov.ru
Description: Подсчет количества посещений страниц на базе stat.azbyka.ru
Version: 1.1
Version: 1.2
Author: VBog
Author URI: https://bogaiskov.ru
License: GPL2
......@@ -38,7 +38,7 @@ if ( !defined('ABSPATH') ) {
die( 'Sorry, you are not allowed to access this page directly.' );
}
define('BG_COUNTER_VERSION', '1.1.2');
define('BG_COUNTER_VERSION', '1.2.0');
define('BG_COUNTER_LOG', dirname(__FILE__ ).'/bg_counter.log');
define('BG_COUNTER_STAT_COUNTERS','https://stat.azbyka.ru/counters');
define('BG_COUNTER_STAT_RAITING','https://stat.azbyka.ru/rating');
......
......@@ -2,7 +2,9 @@
margin: 5px;
padding: 0;
}
.widget-item .bg-az-top-posts li {
.widget-item .bg-az-top-posts li,
.widget-item .bg-az-counter p {
margin: 0px;
padding: 5px;
list-style-type: none;
}
......@@ -20,7 +22,9 @@
.widget-item li a {
color: black;
}
.widget-item li .bg-az-count {
.widget-item li .bg-az-count,
.widget-item p .bg-az-counter-now,
.widget-item p .bg-az-counter-views {
color: #999;
}
.widget-item li:hover {
......
......@@ -226,7 +226,11 @@ function verify_post ($id) {
if (!$post) return 'no_post';
$type = $post->post_type;
if ($type != 'post' && $type != 'page') return $type;
// Список типов записей имеющих страницу во форонте
$post_types = get_post_types( [ 'publicly_queryable'=>1 ] );
$post_types['page'] = 'page'; // встроенный тип не имеет publicly_queryable
unset( $post_types['attachment'] ); // удалим attachment
if (!in_array($types, $post_types)) return $type;
$status = $post->post_status;
return $status;
......
<?php
/*****************************************************************************************
Виджет отображает в сайдбаре
Список популярных постов
******************************************************************************************/
class bg_counter_TopPostsWidget extends WP_Widget {
// создание виджета
......@@ -62,8 +67,87 @@ class bg_counter_TopPostsWidget extends WP_Widget {
}
}
// регистрация виджета
function bg_counter_top_posts_widget_load() {
/*****************************************************************************************
Виджет отображает в сайдбаре
Количество онлайн посетителей на сайте
и Общее количество просмотров
******************************************************************************************/
class bg_counter_OnlineNowWidget extends WP_Widget {
// создание виджета
function __construct() {
parent::__construct(
'bg_counter_online_widget',
'Сейчас на сайте', // заголовок виджета
array( 'description' => 'Количество посетителей на сайте.' ) // описание
);
}
// фронтэнд виджета
public function widget( $args, $instance ) {
$title = apply_filters( 'widget_title', $instance['title'] ); // к заголовку применяем фильтр (необязательно)
$subtitle1 = $instance['subtitle1'];
$subtitle2 = $instance['subtitle2'];
echo $args['before_widget'];
if ( ! empty( $title ) )
echo $args['before_title'] . $title . $args['after_title'];
?>
<div class="widget-item">
<div class="widget-inner">
<span class="bg-az-counter">
<p><?php echo $subtitle1; ?>: <span class="bg-az-counter-now"></span></p>
<p><?php echo $subtitle2; ?>: <span class="bg-az-counter-views"></span></p>
</span>
</div>
</div>
<?php
echo $args['after_widget'];
}
// бэкэнд виджета
public function form( $instance ) {
if ( isset( $instance[ 'title' ] ) ) {
$title = $instance[ 'title' ];
}
if ( isset( $instance[ 'posts_per_page' ] ) ) {
$posts_per_page = $instance[ 'posts_per_page' ];
}
?>
<p>
<label for="<?php echo $this->get_field_id( 'title' ); ?>">Заголовок</label>
<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'subtitle1' ); ?>">Количество записей:</label>
<input id="<?php echo $this->get_field_id( 'subtitle1' ); ?>" name="<?php echo $this->get_field_name( 'subtitle1' ); ?>" type="text" value="<?php echo ($subtitle1) ? esc_attr( $subtitle1 ) : 'Сейчас на сайте'; ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id( 'subtitle2' ); ?>">Количество записей:</label>
<input id="<?php echo $this->get_field_id( 'subtitle2' ); ?>" name="<?php echo $this->get_field_name( 'subtitle2' ); ?>" type="text" value="<?php echo ($subtitle2) ? esc_attr( $subtitle2 ) : 'Всего просмотров'; ?>" />
</p>
<?php
}
// сохранение настроек виджета
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
$instance['subtitle1'] = ( ! empty( $new_instance['subtitle1'] ) ) ? strip_tags( $new_instance['subtitle1'] ) : 'Сейчас на сайте';
$instance['subtitle2'] = ( ! empty( $new_instance['subtitle2'] ) ) ? strip_tags( $new_instance['subtitle2'] ) : 'Всего просмотров';
return $instance;
}
}
/*****************************************************************************************
Регистрация виджетов
******************************************************************************************/
function bg_counter_widgets_load() {
register_widget( 'bg_counter_TopPostsWidget' );
register_widget( 'bg_counter_OnlineNowWidget' );
}
add_action( 'widgets_init', 'bg_counter_top_posts_widget_load' );
\ No newline at end of file
add_action( 'widgets_init', 'bg_counter_widgets_load' );
\ No newline at end of file
......@@ -6,10 +6,10 @@ jQuery( document ).ready(function() {
var socket = new WebSocket(request);
socket.onopen = function() {
if (bg_counter.debug) console.log(" Соединение установлено. "+request);
GetAllCounter();
GetAllCounters();
};
}
GetAllCounter();
GetAllCounters();
});
/*********************************************************************************
......@@ -79,13 +79,14 @@ GET /counters/project/test/author/1/book/3
}
Если счётчик не существует, возвращает 404.
**********************************************************************************/
function GetAllCounter() {
function GetAllCounters() {
jQuery('span.bg-az-counter').each (function () {
var el = jQuery(this);
var type = el.attr('data-type');
var id = el.attr('data-ID');
var request = bg_counter.counterurl+bg_counter.project+"/"+type+"/"+id;
if (!type || !id) var request = bg_counter.counterurl+bg_counter.project;
else var request = bg_counter.counterurl+bg_counter.project+"/"+type+"/"+id;
var xhr = new XMLHttpRequest();
xhr.open("GET", request, true);
xhr.onreadystatechange = function() {
......@@ -117,34 +118,6 @@ function GetAllCounter() {
xhr.send();
});
}
function GetAllCounter_() {
'use strict';
jQuery('span.bg-az-counter').each (function () {
var el = jQuery(this);
var id = el.attr('data-ID');
var type = el.attr('data-type');
var request = bg_counter.counterurl+bg_counter.project+"/"+type+"/"+id;
fetch(request)
.then(function(response) {
if (response.ok) {
response.json().then(function(resp) {
if (bg_counter.debug) console.log('GET REQUEST: '+request);
if (bg_counter.debug) console.log(JSON.stringify(resp));
el.find('span.bg-az-counter-views').text(addDelimiter(resp.data.total));
el.find('span.bg-az-counter-now').text(addDelimiter(resp.data.now));
});
} else {
throw ('GET REQUEST: '+request+' ERROR '+response.status);
}
})
.catch(function(err) {
console.warn( err);
el.find('span.bg-az-counter-views').text(' - ');
el.find('span.bg-az-counter-now').text(' - ');
});
});
}
/*********************************************************************************
Отображает значения счетчика на странице
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment