Commit 1458d4e6 authored by Vadim's avatar Vadim

Version 1.2

1. Разрешены пользовательские типы постов 2. Виджет Общего количества онлайн-посетителей на сайте и просмотров всех страниц
parent e810c523
...@@ -22,6 +22,9 @@ ...@@ -22,6 +22,9 @@
Для вставки HTML-кода на страницу используйте шорт-код `[bg_counter type='post' id='1234' now='true']` или php-функцию `bg_az_counter_views ($type, $id, $now);` в шаблоне записи (поста). Для вставки 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*** с значением ***true*** (или любое значение кроме null, false, 0, ""), то будут отображаться количество пользователей, просматривающих в данный момент страницу и общее количество просмотров страницы.
Если параметры ***type*** и/или ***ID*** не заданы или заданы пустые значения, то будет выведено общее количество просмотров и онлайн-посетителей на сайте.
В случае ***now=false** (или 0, "") - только общее количество просмотров страницы. В случае ***now=false** (или 0, "") - только общее количество просмотров страницы.
Если этот параметр не задан (или задан как ***now=null***), то используется значение, заданное в настройках плагина. Если этот параметр не задан (или задан как ***now=null***), то используется значение, заданное в настройках плагина.
...@@ -69,6 +72,7 @@ ...@@ -69,6 +72,7 @@
``` ```
Для вывода списка популярных постов в боковую панель используйте **виджет "Популярные записи"**, который работает аналогично соответствующему шорт-коду. Для вывода списка популярных постов в боковую панель используйте **виджет "Популярные записи"**, который работает аналогично соответствующему шорт-коду.
**Виджет "Сейчас на сайте"**, выводит в боковую панель количество онлайн-посетителей на сайте и общее количество просмотров странц.
Плагин позволяет загрузить на сервер данные из плагинов **Post Views Counter** и/или **WP Popular Posts**, а также из произвольных полей **"views"**. Плагин позволяет загрузить на сервер данные из плагинов **Post Views Counter** и/или **WP Popular Posts**, а также из произвольных полей **"views"**.
Кроме того плагин ежедневно сохраняет архив данных в файле `wp-content/uploads/bg_az_counter.json`, которые при необходимости можно также загрузить на сервер. Кроме того плагин ежедневно сохраняет архив данных в файле `wp-content/uploads/bg_az_counter.json`, которые при необходимости можно также загрузить на сервер.
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
Plugin Name: Bg Az-Counter Plugin Name: Bg Az-Counter
Plugin URI: https://bogaiskov.ru Plugin URI: https://bogaiskov.ru
Description: Подсчет количества посещений страниц на базе stat.azbyka.ru Description: Подсчет количества посещений страниц на базе stat.azbyka.ru
Version: 1.1 Version: 1.2
Author: VBog Author: VBog
Author URI: https://bogaiskov.ru Author URI: https://bogaiskov.ru
License: GPL2 License: GPL2
...@@ -38,7 +38,7 @@ if ( !defined('ABSPATH') ) { ...@@ -38,7 +38,7 @@ if ( !defined('ABSPATH') ) {
die( 'Sorry, you are not allowed to access this page directly.' ); 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_LOG', dirname(__FILE__ ).'/bg_counter.log');
define('BG_COUNTER_STAT_COUNTERS','https://stat.azbyka.ru/counters'); define('BG_COUNTER_STAT_COUNTERS','https://stat.azbyka.ru/counters');
define('BG_COUNTER_STAT_RAITING','https://stat.azbyka.ru/rating'); define('BG_COUNTER_STAT_RAITING','https://stat.azbyka.ru/rating');
......
...@@ -2,7 +2,9 @@ ...@@ -2,7 +2,9 @@
margin: 5px; margin: 5px;
padding: 0; 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; padding: 5px;
list-style-type: none; list-style-type: none;
} }
...@@ -20,7 +22,9 @@ ...@@ -20,7 +22,9 @@
.widget-item li a { .widget-item li a {
color: black; 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; color: #999;
} }
.widget-item li:hover { .widget-item li:hover {
......
...@@ -226,7 +226,11 @@ function verify_post ($id) { ...@@ -226,7 +226,11 @@ function verify_post ($id) {
if (!$post) return 'no_post'; if (!$post) return 'no_post';
$type = $post->post_type; $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; $status = $post->post_status;
return $status; return $status;
......
<?php <?php
/*****************************************************************************************
Виджет отображает в сайдбаре
Список популярных постов
******************************************************************************************/
class bg_counter_TopPostsWidget extends WP_Widget { class bg_counter_TopPostsWidget extends WP_Widget {
// создание виджета // создание виджета
...@@ -62,8 +67,87 @@ 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_TopPostsWidget' );
register_widget( 'bg_counter_OnlineNowWidget' );
} }
add_action( 'widgets_init', 'bg_counter_top_posts_widget_load' ); add_action( 'widgets_init', 'bg_counter_widgets_load' );
\ No newline at end of file \ No newline at end of file
...@@ -6,10 +6,10 @@ jQuery( document ).ready(function() { ...@@ -6,10 +6,10 @@ jQuery( document ).ready(function() {
var socket = new WebSocket(request); var socket = new WebSocket(request);
socket.onopen = function() { socket.onopen = function() {
if (bg_counter.debug) console.log(" Соединение установлено. "+request); if (bg_counter.debug) console.log(" Соединение установлено. "+request);
GetAllCounter(); GetAllCounters();
}; };
} }
GetAllCounter(); GetAllCounters();
}); });
/********************************************************************************* /*********************************************************************************
...@@ -79,13 +79,14 @@ GET /counters/project/test/author/1/book/3 ...@@ -79,13 +79,14 @@ GET /counters/project/test/author/1/book/3
} }
Если счётчик не существует, возвращает 404. Если счётчик не существует, возвращает 404.
**********************************************************************************/ **********************************************************************************/
function GetAllCounter() { function GetAllCounters() {
jQuery('span.bg-az-counter').each (function () { jQuery('span.bg-az-counter').each (function () {
var el = jQuery(this); var el = jQuery(this);
var type = el.attr('data-type'); var type = el.attr('data-type');
var id = el.attr('data-ID'); 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(); var xhr = new XMLHttpRequest();
xhr.open("GET", request, true); xhr.open("GET", request, true);
xhr.onreadystatechange = function() { xhr.onreadystatechange = function() {
...@@ -117,34 +118,6 @@ function GetAllCounter() { ...@@ -117,34 +118,6 @@ function GetAllCounter() {
xhr.send(); 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