Можно ли в post meta хранить динамическую переменую, а если нет — то где?

Столкнулся с такой нетривиальной задачей в WordPress.

Имееться кастомный тип записи, для простоты назовем post_type=>'companies'. Пользователи имеют возможнасть оставлять комментарии на страницах данного типа записи, и в этих комментариях можно оставлять два ретинга: rating_product и rating_service.(Каждый от 0 до 5) На основе этих рейтингов формируеться что в среднем данный пользователь думает о продукте $rating=($rating_product+$rating_service)/2 Тут всё понятно. Сохраняються в comments_meta .

А теперь вопрос - есть некая переменная $full_rating равная сумме всех значения $rating поделеных на количество пользователей которые проголосовали в этом посте. Это значение мы отображаем в карточке каждой компании 'companies'.(Оно будет участвовать в фильтрации) Как и где ёё хранить?

*Проблема состоит в том, что предположим администратор сайта удаляет пользователя, а это означает, что всё что этот пользователь наголосовал должно убраться из каждой такой переменной $full_rating каждого такого поста вместе с его комментариями. И каким образом будет удален пользователь (или отключен) не понятно.

Подскажите, как можно б было решить данную задачу... В mySQL не силен, но первое, что пришло на мысль это некий столбец в таблице wp_post который бы каким-то образом динамически хранил значение $full_rating возле каждого такого поста.

Заметки к вопросу:
mi13 год назад

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

Kama год назад

Переменные (в том числе "динамические") могут быть только в коде. Хранятся всегда какие-то данные: строки, числа...

Чтобы сделать все что ты написал, нужно при каждом изменении данных поста, пользователя, перезаписывать их в БД. При обновлении, обновлять. При удалении удалять. Тут магии никакой нет, но есть не мало работы, которую нужно проделать.

Как вариант, чтобы не нагружать БД частыми записями, можно записывать/удалять данные в , например, редис кэш и периодически, например раз в 5 минут синхронизировать данные в кэше с данными в БД. Но это потребует еще больше работы. Впрочем для твоей задачи я не вижу причины обмазываться кэшем. Просто в БД писать/обновлять/удалять вроде бы норм должно работать. Комментят и удаляют юзеров не так часто.

BlackStar год назад

Спасибо, за советы. Понял что большинство склоняеться хранить значение $full_rating в post_meta поста, но вопрос с отключением или удалением пользователя всё ещё актуален. Как в таком случаии вешать слушатель, как это контролировать ? Если пользователя отключили... на время проверки его прав доступа, потом включили... и как Его комментарии потерлись ?

Kama год назад

В ВП есть события под все эти случаи, например чтобы что-то сделать при обновлении юзера (включили отключили его) юзаешь хук wp_update_user и т.д.

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

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

BlackStar год назад

Спасибо за советы.