Публикация в группе: Плагин WP-Recall - Личный кабинет на WordPress

Категории группы: Обновления

Приветствую!

В 14-ой версии плагина WP-Recall достаточно много изменений, что то добавлено, а что то наоборот было убрано из ядра.

Пойдем по порядку, начем с основ.

Оптимизация хранения данных плагина

Порядок хранения данных плагина и его дополнений был пересмотрен.

Формирование таблиц для данных дополнений базовой части плагина теперь производится через функцию dbDelta, что в будущем позволит безболезненно вносить изменения в эти таблицы.

В указанных таблицах хранимые данные впервые стали индексироваться, что должно благотворно повлиять на скорость выборки данных и их сортировку при обращении к БД.

Были переименованы ключевые опции плагина из таблицы wp_options, добавлен свой префикс. В результате, имеем следующие имена:

  • rcl_global_options - здесь хранятся все глобальные настройки плагина и его дополнений
  • rcl_active_addons - данные об активированных дополнениях
  • rcl_profile_fields - созданные произвольные поля профиля и их настройки
  • rcl_profile_default - данные о выводимых дефолтных полях профиля
  • rcl_cart_fields - данные о созданных полях формы заказа дополнения магазина
  • rcl_fields_% - данные о созданных произвольных полях формы публикации для различных типов записей, где % - post_type

Ранее почти все опции плагина и его дополнений хранились в одном общем глобальном массиве $rcl_options, чтобы было не всегда целесообразно, ведь данный массив приходилось получать всегда при загрузке страницы, даже если половина опций из него, на данный момент, вообще не требовалась. С ростом количества установленных дополнений массив опций также раздувался от настроек этих дополнений, попусту тратя ресурсы сервера от ненужных настроек. Но теперь появилась возможность положить конец этой порочной практике, разработчики дополнений могут разделять настройки своего дополнения на локальные и глобальные. Глобальные настройки будут всегда доступны все в том же массиве $rcl_options, а локальные нужно будет получать стандартной функцией get_option() и только там где они действительно необходимы.

Опции дополнения, как и ранее, можно регистрировать с помощью функционала описанного в этой статье, но теперь для каждой отдельной настройки можно будет указать ее тип 'type'=>'local' (локальная настройка), например, так:

$fields->option('select',array(
     'name'=>'rcl_footer_link',
     'type'=>'local',
     'options'=>array(__('No','wp-recall'),__('Yes','wp-recall'))
))

Если тип указан как global или не указан вообще, то настройка будет глобальной.

Хранение настроек в глобальном массиве будет оправдано только тогда, когда они будут требоваться очень часто, в идеале, на каждой странице сайта. Локальные настройки желательно использовать только если данная настройка требуется очень редко, только при определенных условиях.

Разделение настроек дополнений на локальные и глобальные для дополнений к плагину будет считаться хорошей практикой со стороны разработчика, который думает об оптимизации работы своего дополнения.

Оптимизация работы с событиями по расписанию

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

  • rcl_cron_hourly - выполняется каждый час
  • rcl_cron_twicedaily - выполняется два раза в сутки
  • rcl_cron_daily - выполняется один раз в сутки

Например, если нам надо добавить какое то действие, которое выполнялось бы каждый час, то необходимо просто подключить требуемую функцию к экшну rcl_cron_hourly:

add_action('rcl_cron_hourly','my_new_shedule_function');
function my_new_shedule_function(){
	//тут какие то действия
}

Таким образом, стало гораздо проще добавлять новые события в расписание крона, просто подключаясь к расписанию событий плагина WP-Recall. Например, так подключена проверка обновлений для установленных дополнений к плагину и ежечасная отправка уведомлений о непрочитанных личных сообщениях.

Новые стили плагина

В плагине были перебраны и переработаны основные стили, произведена их оптимизация, произведено сведение повторяющихся правил, появился свой стандарт классов.

Идущие ранее в комплекте с плагином стилевые шаблоны были удалены, так как зачастую они отличались друг от друга только цветовой гаммой. Вместо них в настройках появилась возможность указывать для плагина основной цвет в котором он будет работать на сайте.

2016-01-31 18-26-30 НАСТРОЙКИ ‹ WPPOST - продажа цифровых товаров — WordPress - Google Chrome

Благодаря этому цветовое отображение плагина стало возможным настроить под любой сайт, с соблюдением цветовой гаммы сайта.

Разработчики желающие обеспечить поддержку установленного в настройках цвета для элементов плагина могут назначать класс 'recall-button' для тех кнопок или табов, которые необходимо также окрашивать в действующий цвет плагина.

Возможность подключения стилевых шаблонов осталась, но смысловая нагрузка у подключаемых шаблонов стала иной. Они должны вносить изменения в порядок вывода элементов плагина, таких как внешние и внутренние отступы, бордеры и их толщина, размер шрифта, обтекание и тп. без оглядки на цвета, так как теперь это настраивается через общую настройку плагина.

Вся базовая часть плагина стала полностью адаптивной - для устройств с экраном до 360 пикселей плагин отображается также превосходно как и на большом экране.

Свой функционал кеширования

Пользователи плагина знают насколько трудно настроить на своем сайте кеширование при работающем плагине WP-Recall, как правило контент плагина должен выводится динамически для обеспечения вывода актуальной информации, а кешируя весь сайт через стандартные плагины кеширования этого добиться достаточно сложно и зачастую многие отказываются от кеширования на сайте вообще.

Идя навстречу пользователям мы добавили в плагин свой функционал объектного кеширования, который, возможно, сможет не только снизить нагрузку на сайт при использовании плагина, но и обеспечить вывод актуального контента формируемого плагином.

Кеширование плагина является объектным, т.е. направленным на кеширование только указанного объекта на странице, а не всех страницы в целом. Например, отдельным объектом кеширования в личном кабинете будет являться контент отдельной вкладки. Для каждого объекта кеширования создается свой файл кеша, его имя формируется в зависимости от переданного в момент формирования кеша ключа, для каждого объекта кеширования ключ, как и имя файла кеша уникально. Весь сформированный кеш хранится в папке /wp-content/uploads/rcl-uploads/cache/ Каждый файл кеша при выводе проверяется на соответствие "свежести" и если файл устарел, то он будет перезаписан. Раз в сутки вся папке кеша очищается.

В общих настройках плагина появилась опция позволяющая включить/отключить встроенный функционал кеширования

2016-01-31 18-38-38 НАСТРОЙКИ ‹ WPPOST - продажа цифровых товаров — WordPress - Google Chrome

Настройки кеширования позволяют указать время обновления кеша и порядок его вывода для гостей или всех посетителей сайта.

Если на сайте включено кеширование от плагина, то начинает кешироваться контент:

  • при выводе пользователей через шорткод userlist
  • виджетов новых пользователей и последних посетителей сайта
  • вкладок личного кабинета, если данные вкладки поддерживают кеширование

Следует учесть, что личный кабинет, выводимый через шорткод [wp-recall] и шорткод [userlist] кешировать через шорткод [rcl-cache] не имеет смысла, тк вкладки личного кабинета и вывод пользователей кешируется автоматически, если включено кеширование плагина wp-recall.

Причем, при выводе списка пользователей через шорткод userlist с сортировкой по их активности, обновление кеша производится с частотой указанной в настройке "Таймаут активности" плагина, по-умолчанию - каждые 10 минут, для обеспечения актуальности вывода пользователей.

Для обеспечения поддержки функционала кеширования определенной вкладкой личного кабинета для них была добавлена дополнительная настройка 'cache'=>true, которую необходимо указывать при регистрации вкладки через функцию rcl_tab(), например:

rcl_tab('followers','rcl_followers_tab',__('Followers','wp-recall'),array('cache'=>true));

Если у кого то возникнет необходимость использовать функционал кеширования плагина за его пределами, например, для контента формируемого сторонними шорткодами от шаблона или других плагинов, в функционал плагина WP-Recall был добавлен новый шорткод:

[rcl-cache]

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

  • time - время кеширования в секундах (необязательно, по-умочанию: время кеширования указанное в настройках плагина)
  • key - строка, уникальный ключ для получения выводимого контента из кеша. (обязательно в случае применения нескольких шорткодов кеширования на одной странице)
  • only_guest - в значении true разрешает применение кеширования только для гостей сайта - незарегистрированных пользователей

Пример использования:
[rcl-cache time="3600" key="my-unique-key"]
//тут размещаем кешируемый контент,
//как правило это другие шорткоды
[/rcl-cache]

Данный шорткод активно применяется на текущем сайте, например, практически весь контент главной страницы формируется различными шорткодами, вот их мы и кешируем.

Примечание: данный шорткод бессмысленно применять в php-коде через функцию do_shortcode(), тк кешируемый контент уже будет сформирован еще до вывода кеша, т.е. php-код отработает в любом случае.

В ближайшее время будет опубликована статья о порядке применения функционала кеширования плагина WP-Recall внутри php-кода.

Оптимизация js и безопасность ajax-запросов

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

У плагина было сформировано что то вроде своего ядра для формирования и вывода контента через ajax-запросы. В первую очередь, данное ядро, используют все дополнения, которые добавляют свои вкладки в личном кабинете, если их загрузка разрешена через ajax.

Стало гораздо проще указывать поддержку загрузки контента определенной вкладки через ajax, теперь достаточно указать 'ajax-load'=>true в настройках при регистрации вкладки через функцию rcl_tab(), например:

rcl_tab('followers','rcl_followers_tab',__('Followers','wp-recall'),array('ajax-load'=>true));

Также теперь практически все ajax-запросы плагина обязательно передают уникальный ключ безопасности, который проверяется при получении данных запроса в функции обработчике, благодаря чему безопасность использования таких запросов была существенно повышена.

Проверка дополнений на ошибки

Когда количество активированных дополнений к плагинуWP-Recall разрастается до нескольких десятков, то становится трудно отслеживать и учитывать взаимодействие отдельных дополнений друг с другом, и зачастую, отключение одного дополнения, функционал которого использовался в других дополнениях мог приводить к фатальной ошибке на сайте и потере его работоспособности. Подобные проблемы стали возникать довольно часто, а их решение достаточно сложно для новичка и сопровождается крайне неудобной процедурой физического удаления на сервере файлов дополнения вызывающего ошибку.

В этой версии мы в корне решаем данную проблему, благодаря новому функционалу проверки дополнений на ошибку при их подключении!

В случае, если подключаемое дополнение по какой то причине вызывает на сервере фатальную ошибку, то это дополнение сразу отключается, а админу показывается соответствующее уведомление.

Например, такое сообщение можно получить если отключить дополнение групп при активированных дополнениях Group Chat и Group Last Comments:

2016-01-31 19-33-27 Дополнения 1 ‹ WPPOST - продажа цифровых товаров — WordPress - Google Chrome

При этом указанные в сообщении дополнения будут также отключены, так как не могут работать без дополнения групп и вызывают на сайте фатальную ошибку. При попытке активировать какое-либо дополнение без активации дополнения, функционал которого подключаемое дополнение будет использовать, появится подобная ошибка, дополнение будет отключено и работа сайта в целом нарушена не будет.

Выделение функционала в отдельные дополнения

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

В базовом функционале теперь недоступны и выделены в отдельные дополнения:

  • дополнение отзывов
  • подключение к платежному агрегатору Робокассе
  • подключение к платежному агрегатору Интеркассе
  • подключение к платежному агрегатору Единой кассе
  • функционал пользовательских закладок на куках (дополнение будет добавлено в каталог дополнений позже)

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

Доработка функционала отдельных дополнений

В этой части кратко пройдемся по функционалу добавленному в отдельные дополнения плагина.

В форме публикации стало возможным выводить предлагаемые к выбору категории в виде набора чекбоксов

2016-01-31 20-44-30 Публикация цифрового товара в магазине   WPPOST - продажа цифровых товаров - Google Chrome

Произвольные поля профиля теперь можно выводить не только в личном кабинете, но и при выводе пользователей через шорткод userlist, достаточно указать в атрибуте data значение profile_fields.

В дополнение личного счета добавлена поддержка работы с нецелыми числами в балансе пользователей, доработан вывод статистики по произведенным платежам на сайте.

В дополнении Money Wallet значительно доработан вывод статистики движения средств на сайте и работа с запросами на вывод средств.

2016-01-31 20-54-20 Движение средств ‹ WPPOST - продажа цифровых товаров — WordPress - Google Chrome

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

Дополнение рейтинга получило в свое распоряжение шорткод для вывода публикаций или комментариев по рейтингу:

[ratinglist]

могут использоваться следующие атрибуты:

number - ограничение по кол-ву выводимых результатов (число), если указано, то постраничной навигации нет
per_page - ограничение по кол-ву результатов на одной странице (число, по-умолчанию 10)
days - указание периода времени в днях, за который производится выборка данных (число). Если указано, то вывод данных производится не по полному рейтингу объекта, а по значению рейтинга набранному за указанный период времени.
rating_type - тип рейтинга объекты которого необходимы к выводу (строка). Значения зависят от списка зарегистрированных типов рейтинга на сайте. Как правило, применяется указание типов записей, если необходимо указать несколько значений, то указываются через запятую.
template - шаблон применяемый для вывода результатов, по-умолчанию 'post' - шаблон для вывода рейтинга публикаций. Если хотим вывести рейтинг комментариев, то необходимо указывать 'comment'.

Примеры использования:

выведем лучшие публикации типа 'post' и 'post-group', за последние 90 дней с постраничной навигацией по 10 объектов на страницу:

[ratinglist per_page="10" days="90" rating_type="post,post-group"]

выведем 10 лучших комментариев сайта:

[ratinglist number="10" rating_type="comment" template="comment"]

2016-01-31 21-22-15 iframe   WPPOST - продажа цифровых товаров - Google Chrome

Пока не могу сказать, что работа над данным шорткодом завершена, возможно, позже будет найден более универсальный подход к выводу контента, пересмотрен шаблон вывода объектов.

Оптимизация запросов к серверу обновления

До этого момента, все запросы от сайтов использующих плагин WP-Recall посылали запрос на проверку обновлений установленных дополнений и их непосредственное обновление на домен codeseller.ru. Как оказалось, сами запросы посылались без оглядки на какую-либо оптимизацию из расчета: одно дополнение - один запрос. Конечно, рано или поздно это должно было оказать влияние на нагрузку сервера codeseller.ru в сторону ее увеличения с ростом популярности плагина, что и произошло. По сути, все более ранние версии плагина WP-Recall осуществляют своеобразную DDOS-атаку на сервер обновления, посылая по несколько десятков запросов в секунду два раза в сутки. Для решения данной проблемы было предпринято ряд мер:

  • все запросы на обновление направляются на поддомен downloads.codeseller.ru, оттуда же теперь осуществляется обновление самих дополнений
  • отправка запросов на обновление была оптимизирована до одного запроса на получение данных ко всем установленным на сайте дополнениям

Не хотелось бы, но на более позднем этапе будет рассматриваться возможность блокирования запросов на обновление на более ранних версиях плагина, если ситуация с увеличением нагрузки будет грозить сбоями в работе сервера. Это хоть и принудительная, но вполне оправданная причина не использовать на своем сайте плагин WP-Recall ниже 14-ой версии, а своевременно обновлять плагин, избавляя себя от возникновения возможных проблем с обновлениями дополнений.

Перед обновлением

Следует учесть, что после обновления, возможно, придется заново разместить виджеты плагина.
Рекомендуется деактивировать все дополнения плагина.
Для тех сайтов, где установлено большое кол-во дополнений, не входящих в базовую часть плагина, мы рекомендуем дождаться обновления этих дополнений для 14-ой версии, иначе возможны проблемы в их работе.
Ну и в конце хотелось бы напомнить, что перед обновлением плагина рекомендуется делать резервное копирование файлов и базы данных сайта, это общее правило, которое действует для всех плагинов WordPress.

8

Автор публикации

не в сети 13 часов

Андрей CS

12K
рассматриваю задания
Комментарии: 2742Публикации: 481Регистрация: 30-11--0001Продаж/Покупок: 0/0