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

Категории группы: Полезное

Добавлено в закладки: 9

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

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

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

Рассмотрим пример регистрации нового типа рейтинга - "Публикация комментария".

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

  • Регистрация нового типа рейтинга в системе
  • Фиксация определенного действия (публикация комментария) за новым типом рейтинга для увеличения рейтинга автора действия
  • Фиксация противоположного действия (удаление комментария) для уменьшения рейтинга автора действия

Чтобы зарегистрировать новый тип рейтинга достаточно разместить следующий код:

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

  • rating_type - тип рейтинга по которому будем обращаться рейтинговым данным относящимся именно к этому типу рейтинга,
  • post_type  - указывается вместо rating_type, если регистрируется тип рейтинга для произвольного типа записи, в этом случае в качестве значения указывается наименование типа записи
  • type_name - имя типа рейтинга, выводимое в настройках и истории изменения рейтинга пользователя
  • icon - класс, необходимый для формирования иконки при выводе истории изменения рейтинга данного типа
  • style - указывается, если необходимо предоставить в настройках выбор для этого типа рейтинга стиля вывода кнопок голосования - Мне нравиться/Плюс и минус. Может быть true/false (только для объектов)
  • data_type - в значении true, если в настройках должна быть возможность выбора вывода общего рейтинга для определенного объекта как сумму всех значений голосов или как сумму количества положительных и отрицательных голосов за объект (только для объектов)
  • limit_votes - в значении true, если в настройках должна быть возможность указать ограничение на количество голосов за объекты определенного пользователя за определенное время (только для объектов)

После того как произведена регистрация нового типа рейтинга, в настройках дополнения рейтинга появятся новые настройки для этого типа рейтинга.

Теперь размещаем код фиксирующий само действие - добавление комментария. Обратимся к данному действию через хук 'wp_insert_comment':

Во время публикации комментария формируется массив данных и передается в функцию rcl_insert_rating(), которая и фиксирует в рейтинговой системе активность определеного типа рейтинга. Рассмотрим данные переданные в эту функцию:

  • user_id - идентификатор пользователя который производит рейтинговую активность. В данному случае, это автор комментария, но если бы речь шла о голосе по отношению к чужому комментарию, то нужно было бы передать идентификатор пользователя оставляющий этот голос.
  • object_id - идентификатор объекта по отношению к которому совершается действие. В данному случае - идентфикатор комментария.
  • object_author - идентификатор автора объекта по отношению к которому совершается действие.
  • rating_value - значение рейтинга на которое изменяем рейтинг пользователя или объекта. Можно указать фиксированное числовое значение или можно получить значение выставленное в настройках данного типа рейтинга через глобальную переменную $rcl_rating_types.
  • rating_type - указываем тип рейтинга к которому будут относиться эти данные в рейтинговой системе

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

Теперь добавим уменьшение рейтинга пользователя при удалении его комментария.

Теперь сформированный массив данных передается в функцию rcl_delete_rating(), которая и производит уменьшение рейтинга. Значение передаваемых данных аналогичное вышеописанному. Стоит только заметить, что при уменьшении рейтинга для определеного объекта его общее значение не удаляется и сохраняется в базе данных, но в данном случае в этом нет необходимости, так как комментарий с данным идентификатором удаляется навсегда и хранить значение рейтинга для этого объекта не требуется, поэтому производим удаление строки общего рейтинга для данного типа и объекта из БД отдельным запросом.

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

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

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

9

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

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

Андрей CS

10k

пока занят

Комментарии: 1771Публикации: 410Регистрация: 30-11--0001Продаж/Покупок: 16573/114