santime
@santime

Как отсортировать выборку (WP_Query) по произвольному полю, предварительно обработав его значение?

Суть в том, что в произвольном поле храню сериализованный массив с данными о рейтинге записи, простой массив типа:
array(
user_id_1=>цифра от 1 до 5,
user_id_2=>цифра от 1 до 5,
)
При отображении записи все это считается и показывается среднее число рейтинга от 1 до 5.

В документации есть пример для сортировки по произвольному полю, однако мне нужно сортировать не по значению поля, а по его обработанному значению. Есть ли что то подобное в WP?
  • Вопрос задан
  • 37 просмотров
Решения вопроса 1
HeadOnFire
@HeadOnFire
PHP, Laravel & WordPress Evangelist
Если вам надо производить такие вычисления, то у вас архитектурно неправильно реализовано. Такие данные нужно хранить не в postmeta, а в отдельной таблице. Структура, грубо (назовем таблицу post_ratings):
id  |  post_id  |  user_id  |  rating
-------------------------------------
1   |  189      |  34       |  4

Именно по этой таблице делаете начальную выборку с просчетом среднего рейтинга и сортировкой, на выходе получаете список post_id. Их потом передаете в WP_Query через параметр post__in.

Как вариант, можно "кешировать" средний, уже просчитанный, рейтинг в таблице postmeta, в виде одного int. Пересчитывать его либо каждый раз при добавлении новой записи в кастомную таблицу (запросом или отправкой в очередь), либо кроном раз в какое-то время.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@id_baton4eg
ну так сделайте переменную, в ней подсчет, и на место значения ставьте переменную.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы