Neither option are the correct option for your use case
你的问题选错了树,因为你忘了提到你打算根据meta的值来搜索这些帖子。
如果要显示帖子,可以使用任何一种方法,尽管第一种方法在代码中处理起来更干净/更简单。get_post_meta
速度很快,并且依赖于表索引,无论如何,WP都会提前获取post meta。
这里的问题是,如果您有数千个post-meta,或少数超大型post-meta,在极端情况下,这可能会导致内存不足或阻止对象缓存缓存它
但如果你搜索它们呢
显示喜欢该帖子的用户列表会很快,但显示用户喜欢的帖子列表?
This is what would happen to your sites speed and performance:
通过他们的帖子元搜索帖子是非常非常糟糕的。我见过一些在大型服务器上运行的网站被其中的一小部分损坏。这是一个巨大的减速,这种查询可能需要10-20秒才能完成,如果你有超过几个帖子的话。
在这种情况下,您也将面临一个新问题,如果您选择了选项2,那么查找这些帖子的能力将成为一个问题。因此,选项1会更好,但性能仍然很差
一个略胜一筹的解决方案具有相反的权衡,它使用用户元来存储post id,而不是使用post meta来存储用户id。仍然存在问题,即显示喜欢或解锁帖子的用户列表现在非常昂贵。但向用户显示他们喜欢的所有帖子很快。
真正的解决方案和一般经验法则,如果您需要存储某些内容,并且需要搜索/查找/筛选或显示包含此特殊信息的帖子,use a taxonomy.
在本例中,一个名为unlocked_by
, 其中,术语slug/name是喜欢它的用户ID。
现在您的查询是super 快速:
$q = new WP_Query([
\'unlocked_by\' => get_current_user_id()
]);
事实上,它太快了,你甚至不需要那个查询,WP在
/unlocked_by/2/
(顺便说一句,我是2号用户),假设您启用了该功能。
您甚至可以通过以下方式添加参数pre_get_posts
所以这是透明的。
这个wp_get_object_terms
和wp_get_object_terms
功能是您的朋友