如何让用户级别编辑任何人制作的自定义帖子类型?

时间:2014-03-01 05:02:58

标签: php wordpress wordpress-plugin

我不是PHP / WordPress的专家,我正在运行一个具有多个用户级别的WP站点。我已经创建了一个名为“race”的自定义帖子类型。我想允许贡献者级别能够编辑已经从任何其他用户发布的“比赛”,而不仅仅是他们自己。

目前,只有作者可以这样做,而贡献者只能编辑他自己发布的“比赛”。

自定义帖子类型由CPT UI plugin制作,我自己没有编码。

我有一个用户角色/功能插件(“用户角色编辑器”和“成员”),我知道如何在注册功能后使用它们,但我不知道如何设置自定义类型的功能交。

我认为this entry is related to my problem(代码的最后一点)但我不知道在post类型已经存在的情况下如何调整它,以及应该在哪些文件中插入代码。

PS。作为第二步,我希望编辑必须由作者在撰稿人的任何时候批准。目前,如果贡献者编辑自己的“种族”,则会立即发布更改。目前只需首次发布即可获得批准。

2 个答案:

答案 0 :(得分:3)

Wordpress有一个过滤器,用于检查名为" user_has_cap"的功能。我们可以添加" edit_other_posts"和" edit_published_posts"通过这个贡献者。我这里有一个代码,你可以把它放在你的主题functions.php文件或插件中的任何php文件中,试试看:

function allow_user_edit_race_post( $all_caps, $caps, $name, $user ) {
    if( is_user_logged_in() && $name[0] == 'edit_post' ) {
        global $current_user;
        $post = get_post( $name[2] );
        if( in_array('contributor', $current_user->roles ) && ! is_wp_error($post) && $post->post_type == 'race' ) {
            $all_caps['edit_others_posts'] = true;
            $all_caps['edit_published_posts'] = true;
        }
    }
    return $all_caps;
}
add_filter( 'user_has_cap', 'allow_user_edit_race_post', 10, 4 );

希望这有帮助!

答案 1 :(得分:0)

将这段代码添加到您的函数文件中:

function wp_change_cap_type() {
   global $wp_post_types;
   $wp_post_types['race']->capability_type = 'race';
}
add_action('init', 'wp_change_cap_type');

然后将功能'edit_others_races'和'edit_races'分配给Contributor角色以及您希望拥有该功能的任何其他人(编辑,管理员等)。不要将“publish_races”分配给Contributor角色,因为只有作者应该这样做。