自定义发布类型功能单数/复数

时间:2019-09-04 作者:Gooze

如果我添加了一个自定义的帖子类型,只是为了获得许可:

register_post_type( \'event\',
    array(
        \'labels\' => array(…),
        \'capability_type\' => [\'event\',\'events\'],
        \'map_meta_cap\' => true,
    )
);
产生的能力是什么?(单数/复数)

\'read_event\'
\'read_events\'
我找不到一种最有效的变体。在我所有的项目中,我只是将功能加倍,一次是单数,一次是复数。。。但我觉得那太糟糕了。有人能弄清楚什么时候用单数,什么时候用复数吗?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

通常情况下,答案就在文档中。在里面the documentation 对于register_post_type() 您将看到:

  • \'capability_type\'
    (字符串)用于构建读取、编辑和删除功能的字符串。可以作为数组传递,以允许在使用此参数作为构建功能的基础时使用其他复数,例如数组(\'story\',\'stories\')。默认“post”
  • \'capabilities\'
    (数组)此帖子类型的功能数组$默认情况下,capability\\u type用作构建功能的基础。看见get_post_type_capabilities().
Socapability_type 使用提供的单数和复数字符串填充capabilities 如果我们遵循that link 至文档get_post_type_capabilities() 我们可以看到完整的功能列表(重点是我的):

默认情况下,七个键被接受为功能阵列的一部分:

  • edit_post, read_post, 和delete_post 是元功能,通常根据上下文映射到相应的基本功能,即正在编辑/读取/删除的帖子和正在检查的用户或角色。因此,这些功能通常不会直接授予用户或角色
  • edit_posts – 控制是否可以编辑此帖子类型的对象
  • edit_others_posts – 控制是否可以编辑其他用户拥有的此类型的对象。如果帖子类型不支持作者,则其行为类似于edit\\u帖子
  • publish_posts – 控制此帖子类型的发布对象
  • read_private_posts – 控制是否可以读取私有对象
这四种基本功能在不同位置的core中进行了检查。还有其他七种基本功能在core中没有直接引用,除了map_meta_cap(), 它将上述三个元功能转换为一个或多个基本功能,然后必须根据上下文对照用户或角色进行检查。

  • read – 控制是否可以读取此帖子类型的对象
  • delete_posts – 控制是否可以删除此帖子类型的对象
  • delete_private_posts – 控制是否可以删除私有对象
  • delete_published_posts – 控制是否可以删除已发布的对象
  • delete_others_posts – 控制是否可以删除其他用户拥有的对象。如果帖子类型不支持作者,则其行为类似于delete\\u posts
  • edit_private_posts – 控制是否可以编辑专用对象
  • edit_published_posts – 控制是否可以编辑已发布的对象
因此通过[\'event\',\'events\'] 所有这些功能post 将创建,但使用event (例如。edit_event), 以及posts 将创建,但使用events (例如。edit_events). 但是,请注意\'event\'capability_type 将得到完全相同的结果。这是因为如果只传递一个值,WordPress将自动添加s 复数形式。您需要分别传递单数和复数版本的唯一原因是,如果复数版本不只是相同的加“s”,例如故事vs故事(如果您只传递了\'story\' 那么复数功能将是edit_storys).

相关推荐

正在尝试获取wp-includes/capabilities.php中非对象的属性

在调试中,我每分钟都会收到以下通知序列。日志:[23-Oct-2012 13:27:33 UTC] PHP Notice: Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1022 [23-Oct-2012 13:27:33 UTC] PHP Notice: Trying to get property of non-object in mysite/wp-includes/