Сообщения с запросами заказов WordPress о популярности настраиваемого поля

У меня есть сайт WordPress, который позволяет пользователю «лайкать» сообщения. Это добавляет к сообщению пользовательское поле с идентификатором пользователя, например:

add_post_meta($post_id, 'like', $user_id, false);

Таким образом, пост может закончиться чем-то вроде 100 разных ключей «Нравится» с идентификатором пользователя.

Поэтому я хочу вернуть таблицу лидеров самых активных пользователей на основе лайков. Поэтому я хотел бы запросить, что посмотрело на meta_key «как» для $user_id, которые появляются чаще всего. Это будет выглядеть примерно так. Очевидно, что сейчас это не работает.

$args = array(
   'post_type' => 'post',
   'meta_key' => 'likes',
   'post_status'       => 'publish',
   'posts_per_page'    => 20,
   'orderby'           => 'popularity', // This doesn't exist yet, but I wants it!      
   'order' => 'ASC',
   'meta_query' => array(
       array(
           'key' => 'likes',
           'value' => $user_id,
           'compare' => '=',
       )
   )
 );
 $query = new WP_Query($args);

Это вообще возможно? Или лучше периодически получать все посты, суммировать лайки и кэшировать результаты?

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

Спасибо, Дрю.


person Drew Baker    schedule 10.08.2013    source источник
comment
лайки складываются в стоимость? (т. е. когда приходит новый лайк, он добавляет его)   -  person Mark    schedule 11.08.2013
comment
Никаких лайков не прибавляется. Каждый лайк — это просто идентификатор пользователя, который нажал лайк. Вы должны войти в систему, чтобы увидеть страницу.   -  person Drew Baker    schedule 11.08.2013
comment
Я бы, вероятно, получил количество лайков от facebook (см. этот вопрос), затем orderby meta_value_num   -  person Mark    schedule 11.08.2013
comment
Мое приложение не имеет ничего общего с Facebook. Хотя идея хорошая.   -  person Drew Baker    schedule 11.08.2013


Ответы (1)


Вот как это сделать с помощью SQL:

SELECT post_id, COUNT(*) AS likes
FROM wp_postmeta
WHERE meta_key='like'
GROUP BY post_id
ORDER BY likes DESC

Дайте мне знать, если вам удалось выяснить это с помощью WP_Query, о чем я и прошу здесь: Запрос WordPress: упорядочить по количеству совпавших строк?

person Sean H    schedule 03.08.2015