奇怪的功能/角色行为

时间:2015-07-31 作者:nderambure

我一直在玩自定义帖子类型功能,有些行为对我来说仍然很神秘。

设置说明您有一个名为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列表?

1 个回复
SO网友:John Blackbourn

这听起来像core bug #22895.

除非用户还具有edit_posts 能力(针对Post 职位类型)。

结束

相关推荐

About Wordpress capabilities

我知道WordPress是博客引擎的最佳选择,通过一些插件,如Advance Custom Field,WP可以成为一个很棒的CMS。但它仍然有利于出版商将内容推送给用户。现在我的处境相当严峻。我的朋友想使用WP作为一个引擎,用户可以贡献他们的帖子,其他人可以查看它。是否可以使用WP我可以创建自定义主题(&a);插件可以做到这一点,但当用户在插件上放置很多东西(页面和帖子)时,它对性能有好处吗?