我一直在玩自定义帖子类型功能,有些行为对我来说仍然很神秘。
设置说明您有一个名为show 要定义具有此功能的无线电广播,请执行以下操作:
\'capabilities\' => array(
// meta caps
\'read_post\' => \'read_show\',
\'edit_post\' => \'edit_show\',
\'delete_post\' => \'delete_show\',
// primitive/meta caps
\'create_posts\' => \'create_shows\',
// primitive caps used outside of map_meta_cap()
\'publish_posts\' => \'publish_shows\',
\'read_private_posts\' => \'read_private_shows\',
\'edit_posts\' => \'edit_shows\',
\'edit_others_posts\' => \'edit_others_shows\',
// primitive caps used inside of map_meta_cap()
\'read\' => \'read_shows\',
\'edit_private_posts\' => \'edit_private_shows\',
\'edit_published_posts\' => \'edit_published_shows\',
\'delete_posts\' => \'delete_shows\',
\'delete_private_posts\' => \'delete_private_shows\',
\'delete_published_posts\' => \'delete_published_shows\',
\'delete_others_posts\' => \'delete_others_shows\'
)
添加另一个CPT调用
podcast 通过元值链接到无线电广播(无论如何,这在这里并不重要)。它具有以下功能:
\'capabilities\' => array(
// meta caps
\'read_post\' => \'read_podcast\',
\'edit_post\' => \'edit_podcast\',
\'delete_post\' => \'delete_podcast\',
// primitive/meta caps
\'create_posts\' => \'create_podcasts\',
// primitive caps used outside of map_meta_cap()
\'publish_posts\' => \'publish_podcasts\',
\'read_private_posts\' => \'read_private_podcasts\',
\'edit_posts\' => \'edit_podcasts\',
\'edit_others_posts\' => \'edit_others_podcasts\',
// primitive caps used inside of map_meta_cap()
\'read\' => \'read_podcasts\',
\'edit_private_posts\' => \'edit_private_podcasts\',
\'edit_published_posts\' => \'edit_published_podcasts\',
\'delete_posts\' => \'delete_podcasts\',
\'delete_private_posts\' => \'delete_private_podcasts\',
\'delete_published_posts\' => \'delete_published_podcasts\',
\'delete_others_posts\' => \'delete_others_podcasts\'
)
假设您添加了一个名为
Show Runner 应享有以下权利:
- Edit 它自己的广播(无需创建或删除,广播由编辑创建,编辑将作者更改为节目主持人)
- Create / Edit 其播客(但不发布或删除)
以下是角色功能映射:
add_role(
\'show_runner\',
__( \'Show Runner\', \'lang_plugin\' ),
array(
\'read\' => true,
/* Media upload */
\'upload_files\' => true,
/* CPT show */
\'read_shows\' => true,
\'create_shows\' => false,
\'publish_shows\' => false,
\'edit_shows\' => true,
\'edit_published_shows\' => true,
\'delete_shows\' => false,
/* CPT podcast */
\'read_podcasts\' => true,
\'create_podcasts\' => true,
\'publish_podcasts\' => false,
\'edit_podcasts\' => true,
\'edit_published_podcasts\' => true,
\'delete_podcasts\' => false,
)
);
第一件奇怪的事是一个节目主持人可以
not 访问节目列表,尽管他将“read\\u shows”和“edit\\u shows”设置为true,并且我可以在侧边栏中看到“shows”菜单。
但如果我把“create\\u shows”设为true,他就会访问列表。。。并且可以制作一个节目(但我不想这样!)。
第二件奇怪的事情(来自第一件)
在继续之前,我再次将“create\\u shows”设置为false(以反映我真正想要的)。
如果我更改show_in_menu 的参数podcast CPT将其放入show 菜单(作为子菜单)如下所示:
\'show_in_menu\' => \'edit.php?post_type=show\'
。。。然后,节目主持人可以访问节目列表,而无需“新建节目”按钮。凉的这就是我想要的。
BUT : 如果节目主持人试图创建一个新的播客(他可以在功能方面做到这一点),wordpress表示他无权这样做。。。
结论/问题
为什么CPT的创建依赖于菜单位置的这种情况??这就像播客《CPT遗产》节目《create\\u秀》中的假值,尽管这对他来说是真的。
子问题:角色如何在不将“create\\xxxxx”设置为true的情况下访问CPT列表?