没有一个答案,因为两者都有利弊,这取决于您想要存储什么以及为什么要存储。
选择时要考虑的差异(可能并非详尽无遗)列表:
功能旨在检查用户是否可以做某事。user_can
和current_user_can
帮助您检查用户权限。您也可以使用user meta来实现这一点,但一旦您在core中拥有了该功能,就没有任何意义了。
毫无疑问,这些功能可以用于将具有类似特征的用户分组,即使这些用户与权限无关。在这种情况下,用户使用的功能与分类术语用于帖子的功能有些相似。user_can
函数可用于检查用户是否有能力(类似于has_term
) 但对于meta来说,没有一个核心函数可以做到这一点。然而,通过功能检索用户集合可能比通过简单的元查询检索用户更昂贵(这只是猜测,不是基于真实的性能分析数据)。
动态过滤(无db更改)all 分配给用户的功能非常简单(尤其是如果使用user_can
/ current_user_can
没有理由不这样做),而对meta做同样的事情要困难得多。
元数据可以处理嵌套数据(例如,数组,甚至同一元键的不同(组)值)。这在功能上是不可能的。
功能可以按角色分组。角色在后端也有一个UI,允许通过分配角色来分配“一组”功能。meta没有这样的好处。
功能是独立于用户的实体,它们在用户之后仍然存在:如果删除所有具有该功能的用户,它将保留在那里。这一点不适用于meta:如果用户删除了meta,则所有meta都将与用户一起使用。在对OP进行编辑之后,我想说的是,功能要好得多:您正在用meta实现core已经用功能实现的东西,这正是功能的目的所在。
例如,思考add_menu_page
函数,它具有$capability
参数,该参数允许您仅向具有该功能的用户显示菜单页。
这只是一个示例,有不同的函数接受功能作为参数。此外,正如编辑前的第一点所述,从头开始实现core已经具备的特性是没有意义的。