Top user by rating - очередное чудо моей мысли, которое позволит вам выводить топ пользователей по рейтингу за определенный промежуток времени, а так же создавать свои шаблоны вывода.
Вывод ТОПа пользователей
Вывод происходит через шорткод [ top_user_rating ] который может принимать следующие атрибуты:
templates - имя шаблона для вывода пользователей.
По-умолчанию "block" (в комплекте на данный момент 3 шаблона: block, list и mini)
Для создания своего шаблона можете посмотреть готовые примеры в папке templates, которая внутри папки дополнение. Даете своему шаблону имя user-tubr-ВАШЕИМЯ.php и помещаете его в папку /wp-content/wp-recall/templates/
Шаблон "mini" создан для вывода в сайдбаре, для него я рекомендую отключать параметр sorting (sorting="0")
sorting - включать или нет вывод списка для сортировки, по-умолчанию включено. (1 - включено, 0 - выключено)
По-умолчанию "1"
При включении перед ТОПом пользователей отобразится выпадающий список, в котором вы сможете выбрать за какой промежуток отобразить ТОП. Обновление ТОПа происходит через ajax без перезагрузки страницы. По-умолчанию selected установлено на "За месяц", однако если вы выберете свой промежуток времени через параметр day (ниже) то в селект добавится новый options с вашим кол-вом дней и он будет selected.
limit - Сколько пользователей отображать. (при включенной навигации отвечает за кол-во юзеров на странице)
По-умолчанию "50"
day - За какой промежуток времени считать набранный рейтинг.
По-умолчанию "30"
Если установить значение "0" то будет считаться рейтинг за все время.
period - За какой период считать рейтинг, указывается как начальная дата:конечная дата.
Пример: 2016-03-01:2016-03-18 (год-месяц-день)
Так же в этот параметр можно указать:
{current_week} - будет считаться рейтинг за текущую неделю
{current_month} - будет считаться рейтинг за текущий месяц
По-умолчанию "" - ничего
paged - укажите 1 что бы включить навигацию
По-умолчанию "" - выключена
exclude - позволяет исключить пользователей из рейтинга по id. Для исключения нескольких пользователей перечисляйте их id через запятую
По-умолчанию "" - пусто.
type - для подсчета только определенного типа рейтинга (post - записи, comment - комментарии)
По-умолчанию "" - пусто, весь рейтинг
role - для включения в рейтинг только определенные роли пользователей. Указывается цифрами
10 - Admin, 7 - Editor, 2 - Author, 1 - Contributor, 0 - Subscriber
По-умолчанию: "" - пусто, учитываются все роли
cache_time - Время кеширования результата, ajax не кешируется.
По-умолчанию: "86400" - сутки
Примечание: Я постарался сделать код таким, что бы на одной странице можно было разместить сколько угодно шорткодов (ну мало ли) вроде это получилось, по-крайней мере если зайти на страницу с ТОПом и в сайдбаре так же будет ТОП пользователей, то при ajax обновлении обновится только тот топ, который вы хотите обновить.
На этом вроде все с шорткодом, давайте дальше перейдем к примерам, а затем я покажу код одного из шаблонов вывода с комментариями, чтобы вы могли сделать свой шаблон.
Примеры ТОПов
[ top_user_rating ]
(параметров нет, значит используются по-умолчанию)
[ top_user_rating sorting="0" limit="10" ]
( выключим блок с сортировкой, установим лимит пользователей в 10)
[ top_user_rating templates="list" day="100" ]
(Используем для вывода шаблон "list" и выберем промежуток в 100 дней)
[ top_user_rating templates="mini" day="30" sorting="0" limit="10" ]
(Используем для вывода шаблон "mini" выберем промежуток в 30 дней, установим ограничение пользователей в 10(limit="10"), отключим sorting, а так же выведем это чудо через do_shortcode() в сайдбаре)
Вроде все примеры.
Формирование своего шаблона
Тут я приведу код шаблона list с максимальными пояснениями, но в целом что вас стоит знать:
В шаблоне вам будут доступны 2 переменные из дополнения:
$top_user - Массив.
$top_user["object_author"] -> ID текущего юзера
$top_user["total_rating"] -> Суммарный рейтинг
$position - Обычный каунтер в цикле, в данном случает будет соответствовать уровню пользователя в ТОПе
$firstCheck - текущий счетчик цикла, проверяйте на единицу для вывода заголовка таблицы и т.п.
<?php /* $user_id - id пользователя $rating - рейтинг пользователя за промежуток $user_info - инфа о пользователе (get_userdata()) */ //Записываем id юзера для удобства $user_id = $top_user["object_author"]; //Записываем суммарный рейтинг за промежуток для удобства $rating = $top_user["total_rating"]; //Берем инфо юзера $user_info = get_userdata($user_id); ?> <?php //Текущий пользователь (не в рейтинге, а кто его смотрит) global $user_ID; //Если текущий пользователь равен пользователю в рейтинге - значит он видит себя //Выделим его в рейтинге if ($user_id == $user_ID) { $your = 'style="font-weight:bold;"'; } else { $your = false; } //Выведем 1 раз заголовок рейтинга, что-то типо заголовка таблицы if ($firstCheck== 1) { ?> <div class="tubr-user-title"> <div class="tubr-user-position">Место</div> <div class="tubr-user-name">Пользователь</div> <div class="tubr-user-rating">Получено рейтинга</div> </div> <?php } ?> //Тут ничего нового <div class="tubr-user" data-user-id="<?php echo $user_id ;?>" <?php echo $your; ?>> <div class="tubr-user-position"><?php echo $position; ?></div> <div class="tubr-user-name"> <a href="/author/<?php echo $user_info->user_login; ?>/" target="_blank"> <?php echo $user_info->display_name; ?> </a> </div> <div class="tubr-user-rating"> <div class="tubr-user-value"><?php echo $rating; ?></div> </div> </div>
Спасибо Андрею за консультации )
Стандартная. Выбрать архив с дополнением и нажать "Установить". Или ручками поместить папку дополнения в /wp-content/wp-recall/add-on/
* Добавлена поддержка wp-recall 16.22.3+
= 2.0.3
* Исправлена ошибка, когда при выводе ТОПа за все время минусовой рейтинг отображался как плюсовой
= 2.0.2 =
* Добавлен параметр role для шорткода, позволяющий включать в рейтинг только определенные роли пользователей. Роли указываются числами, значения:
* 10 - Admin, 7 - Editor, 2 - Author, 1 - Contributor, 0 - Subscriber
= 2.0.1 =
* Фикс выпадающего меню фильтрации
= 2.0 =
* Добавлена навигация
* Добавлены опции для настройки фильтров
= 1.8.1 =
* fa -> rcli
= 1.8 =
* Исправлена ошибка с подсчетом рейтинга при указании разных параметров
= 1.7 =
* Добавлен новый шаблон list2
= 1.6 =
* Добавлен атрибут period для указания промежутка подсчета рейтинга. См. комментарии к дополнению
= 1.5 =
* Изменен вывод рейтинга за все время, теперь работает быстрее
* Добавлена возможность вывести место пользователя в ЛК, в области counters
* Внимание! С этой версии по-умолчанию параметр day = 0 т.е. рейтинг за все время!
= 1.4 =
* Добавлено больше вариантов выбора промежутка в выпадающем меню сортировки
= 1.3 =
* Добавлена поддержка кеша recall
* Добавлен атрибут exclude для исключения пользователей из рейтинга по их ID
* Добавлен атрибут type для вывода ТОПа пользователей основываясь на определенном типе рейтинга
* Атрибут cache_time при включении кеша recall можете указать свое время кеша, по-умолчанию 86400 (сутки)
* Вроде что-то еще сделал, а вроде нет, уже не помню, ну ладно...
= 1.2 =
* Фикс получения ссылки на страницу пользователя
= 1.1 =
* Если отображаем ТОП за все время, то берем данные из таблицы rating_totals, иначе из rating_values
= 1.0 =
* Релиз
Вы радуете нас последнее время. Что мне лично нравится - визуальная составляющая. Уже которое дополнение выпускаете с красивой по дизайну реализацией!
Баг (хотя может это только у меня) у кого стоит дополнение Pretty URL Author, если сменился адрес личной страницы, то при нажатии на имя пользователя (который в топе) попадаешь на 404.
Поправил, теперь адрес на страницу получается через get_author_posts_url(); надеюсь не будет проблем с Pretty URL Author
Спасибо! Очень крутое дополнение! 🙂
Но вот хотелось бы "подружить" Pretty URL Author, а то действительно 404 ошибка 🙁
Поправил, должно помочь )
Прикольно, особенно вариант с виджетом Также можно вывод рейтинга видео организовать (я списком пробовал выводить).
Ещё бы вот, топ фото по рейтингу - в таком же духе, как нибудь замутить) Например фотогалерея: http://nebyru.ru/fotogalereya/ но функций пока не каких, просто вывод последних.
В процессе, сегодня обновлю. Правда тогда придется плагин переименовать в Top by rating, что бы более соответствовало название, не знаю можно будет это сделать или нет )
Хотя нет, для этого лучше отдельный шорткод сделать, чтобы путаницы меньше было.
Кстати, если кто-то будет делать свой шаблон - делитесь скриншотами. И сам файл шаблона со стилями можете в личку скинуть, я его в плагин добавлю, может именно он подойдет кому-то лучше стандартных )
Или где-то в пеинте набросок с пожеланиями сделайте, я на досуге запилю шаблон, у самого пока вариантов нет на уме)
Итак, большой апдейт по заявкам.
1. Атрибут exclude для исключения пользователей из рейтинга, по ID. Перечисляется через запятую.
2. Атрибут type для ТОПа только по определенному типу рейтинга, по-умолчанию пусто (весь рейтинг). Известные мне type: comment - комментарии, post - записи, video - видео, что-то еще есть, но это уже от сайта зависит
3. Добавлен атрибут cache_time в котором можно указать время жизни кеша в секундах (по-умолчанию 86400 - сутки)
Судя по пункту 3 вы наверно догадались что теперь шорткод поддерживает кеширование recall (хотя вы и раньше могли закешировать, но может кто не умеет)
ТОП из кеша получается по уникальному ключу, который формируется из всех указанных атрибутов, так что никаких проблем быть не должно, хоть 100500 рейтингов выводите в одном месте.
Единственное я не стал делать кеш для ajax, т.к. это будет немного геморней, а профита мало, я не думаю что у вас кто то будет на странице сидеть и щелкать на обновление ТОПа нон-стоп.
А ниже результаты с кешем и без, сказу сразу что на моем сервере это почти не заметно, т.к. он избыточно мощный и у меня свеженький php 7 под капотом 👿 Но на более слабых хостингах это может сильно ускорить работу.
Тест был на стандартном шорткоде: шаблон block, дней 30, пользователей 50.
Без кеша:
7.81Mb / 0.149s / 140 запросов
http://imgur.com/JZruAFm
С кешем:
7.7Mb / 0.082s / 36 запросов
http://imgur.com/a/jCZZQ
Сам пост обновлю завтра, сегодня уже все спят не утвердят 🙂
Preci, хотел уточнить, каким образом рассчитывается период? Например, если я указываю месяц, то считается предыдущий месяц?
И можно ли добавить в следующих версиях в "промежуток" периоды "за 6 месяцев" и "за год".
Спасибо!
Последние N дней. Для месяца это последние 30 дней, для 3 месяцев 90 дней и т.п.
Промежутки добавлю
Добавил больше вариантов выбора дней при сортировке.
Так же добавил функцию
Где $day - промежуток для учета рейтинга, а $user_id - ид пользователя. Возвращает место пользователя в рейтинге за указанный промежуток (по-молчанию 0 - за все время).
т.е.
Вернет место пользователя с ID 1 в рейтинге за все время. Планируется использовать в ЛК, например там где "Рейтинг" можно будет указать : место в рейтинге N
Но пока это чисто для ознакомления, с поддержкой кеша проблемы, а значит может быть нагрузка на сервер.
Всё супер мне понравилось, вот если б можно было дополнить его рейтингом по рефералам, вообще было б супер. Наверняка у каждого на сайте присутствует реферальная система. Моё предложение сделать вывод рейтинга у кого больше рефералов, если возможно конечно такое.
Возможно, я думаю, все. Но лично у меня на сайте нет никаких рефералов. Если вы имеете ввиду что бы все было как в этом дополнении, только вместо рейтинга считалось кол-во рефералов, то для этого придется отдельный шорткод пилить или плагин, т.к. и так уже атрибутов много, а делать для 1го шорткода целую книгу с атрибутами...
Да и если вы о дополнении Partners System, то у меня его нет и покупать его ради того чтобы запилить такой рейтинг... Маловероятно что я это буду делать
Я понимаю, но это всего лишь было предложение. Если б был такой атрибут, можно было бы сделать что то вроде доски почёта. Было бы неплохой мотивацией для партнёров. Допустим у кого больше рефералов, получал бы за это дополнительное вознаграждение. Да и много чего интересного можно придумать. Но в любом случае спасибо за то что есть. 8)
Можете посмотреть код и переделать плагин под себя, по сути там надо будет подменить названия столбцов и таблицы, ну и имена переменных и т.п. подредактировать, не особо трудно. Я это сделать не смогу тупо потому что у меня нет плагина рефералов, тут уж ничего не поделать)
Обновлено!
1. Теперь при выводе ТОПа за все время данные берутся из таблицы rating_users - стало, наверно, быстрее.
2. Теперь по-умолчанию в шорткоде выводится ТОП за все время (если не указан параметр day)
3. Добавлены опции плагина: возможность включить отображение места пользователя в рейтинге (за все время) в его ЛК (область rounters, где указан рейтинг)
При включении отображения места необходимо будет указать url страницы с шорткодом [ top_user_rating ] - советую указывать на страницу где шорткод выводит топ пользователей за все время.
Так же в опциях вы сможете исключить ID юзеров, которые не будут учитываться при вычислении места пользователя в рейтинге (полезно будет для тех кто в шорткоде кого-то исключает, например админа, в опциях введите тот же ID)
Так же, при желании, вы сможете отключить вывод места пользователя в ЛК и/или отобразить место любого пользователя в любом месте, используя функцию:
Обновил.
Добавлен новый атрибут для указания промежутка подсчета рейтинга
period - позволяет указать промежуток, за который считать рейтинг. Промежуток указывается так: начальная дата:конечная дата например period="2016-03-01:2016-03-18" - выведет топ юзеров по рейтингу с 1 марта 2016 года по 18 марта 2016 года
В выпадающем меню так же как и с датой будет добавляться указанный период. Если вы укажете и day и period - то в выпадающем меню и по-умолчанию отобразятся данные за период, он имеет больший вес.
Круто! Можно легко конкурсы проводить - всё наглядно))
Ну да, можно например сделать страницу с шорткодом [ top_user_rating exclude="1" period="2017-03-18:2017-04-18" ] и написать мол "Кто за месяц наберет больше рейтинга - тот молодец :)"
Крутотень!))) А можно в настройках плагина для справки написать шорткод со всеми атрибутами, этакая шпаргалка чтобы под рукой была 🙂
Дополнение понравилось, но при отображении рейтинга на первом месте показывает пустое место. ID админа указали в исключения... В каком месте еще посмотреть?
Указали в исключения в шорткоде? Что надо сделать чтобы повторить ситуацию?
Проблемы решаем на форуме поддержки товара https://codeseller.ru/forum/product-14516/
Создавайте новую тему
Дополнение понравилось, но при отображении рейтинга на первом месте показывает пустое место. ID админа указали в исключения... В каком месте еще посмотреть? https://yadi.sk/i/OBRXvzdX3G9BNH
Давайте лучше на форум https://codeseller.ru/forum/product-14516/ - скиньте туда полный шорткод, который указываете, а так же что указано в опциях дополнения. Ну и версию дополнения.
Я как раз оттуда взял шорткод и все заработало, спасибо. Кстати выше писали по поводу шпаргалки по шорткодам, присоединяюсь.
почему то у меня не работает. может потому что у меня новая версия плагина?
Если что-то не работает - заводим новую тему на форуме поддержки товара и решаем проблему там. Здесь ссылка на него указана три раза
Добавил новый шаблон list2 с анимацией )
https://youtu.be/wt-9qh8K7cE
Было бы не лишним, как мне думается, добавить вывод вкладки "Место" в "Менеджер вкладок", чтобы была возможность задавать позицию вкладке "Место" в области "Counters"
Если бы так можно было сделать, я бы сделал, но зарегистрировать ее как стандартную кнопку нельзя, т.к. дефолтные кнопки должны отображать какой-то результат, а моя кнопка должна вести на страницу с рейтингом.
Может дополнение круто адаптировать для мобильных телефонов)
Обновлено!
Важно! После обновления:
1. Проверьте ваше кастомные шаблоны и уберите оттуда объявление глобальных переменных $top_user и $position
2. Выберите страницу с шорткодом в настройках плагина, на которую будет вести ссылка из ЛК юзера (с его местом в ТОПе)
Что нового:
Добавлен атрибут paged - если указать 1 то появится постраничная навигация
Теперь в атрибут period можно указать:
{current_week} - будет считаться рейтинг за текущую неделю
{current_month} - будет считаться рейтинг за текущий месяц
В настройках появились 2 новых текстовых поля, где вы можете указывать ваш набор стандартных фильтров и их читаемые названия.
Пример:
Если в поле с набором фильтров указать:
1
10
100
2019-01-01:2019-01-07
{current_week}
А в поле с читаемыми названиями
1=>За сутки
10=>За 10 дней
100=>За 100 дней
2019-01-01:2019-01-07=>За первую неделю января
{current_week}=>За текущую неделю
То фильтр будет иметь вид как на картинке.
p.s. первое значение в фильтре всегда то что указано в period или в day или 30 (в таком же порядке по весу)
Что бы сбросить эти фильтры просто очистите их и сохраните опции, обновите страницу и все будет по-умолчанию.
Существует ли возможность округлять рейтинги до целых чисел? Едва ли пользователям так важно знать, сколько у них там десятитысячных долей рейтинга; а слишком большое число выглядит некрасиво.
Подобные вопросы задают на форуме поддержки.