1

我有一个允许用户“喜欢”帖子的 WordPress 网站。这会在包含用户 ID 的帖子中添加一个自定义字段,如下所示:

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

因此,一个帖子最终可能会包含一个带有用户 ID 的 100 个不同的“like”键。

所以我想根据喜欢返回一个最活跃用户的排行榜。因此,我想查询出现最多的 $user_id 的 meta_key 'like'。它看起来像这样。显然,目前这行不通。

$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);

这甚至可能吗?或者我会更好地定期获取所有帖子,添加喜欢并缓存结果吗?

我知道我可以创建一个自定义字段,该字段会随着喜欢它的人而增加,但我宁愿提出一个查询来实时获取结果(在删除用户等时更健壮)。

谢谢,德鲁

4

1 回答 1

0

以下是使用 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 Query: Orderby number of matching rows?

于 2015-08-03T13:35:55.820 回答