Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何让用户级别编辑任何人制作的自定义帖子类型?_Php_Wordpress - Fatal编程技术网

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

Php 如何让用户级别编辑任何人制作的自定义帖子类型?,php,wordpress,Php,Wordpress,我不是PHP/WordPress方面的专家,我正在运行一个具有多个用户级别的WP站点。我已经创建了一个名为“race”的自定义帖子类型。我想让贡献者级别能够编辑任何其他用户发布的“种族”,而不仅仅是他们自己 目前,只有作者可以这样做,而投稿人只能编辑自己发布的“种族” 自定义帖子类型是由创建的,我没有自己编写 我有一个用户角色/功能插件(“用户角色编辑器”和“成员”),我知道在功能注册后如何使用它们,但我不知道如何为自定义类型的帖子设置功能 我认为(代码的最后一部分),但我不知道在post类型已

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

目前,只有作者可以这样做,而投稿人只能编辑自己发布的“种族”

自定义帖子类型是由创建的,我没有自己编写

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

我认为(代码的最后一部分),但我不知道在post类型已经存在的情况下如何调整它,以及代码应该插入到哪些文件中


另外,作为第二步,我想编辑必须由作者批准任何时候他们是由贡献者。目前,如果一个贡献者编辑了他自己的“种族”,更改会立即发布。现在只需要对初始发布进行批准。

将此代码添加到函数文件中:

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

然后将“编辑其他比赛”和“编辑比赛”功能分配给参与者角色和您希望具有该功能的任何其他人(编辑、管理员等)。不要将“发布比赛”分配给参与者角色,因为只有作者才应该这样做。

Wordpress有一个过滤器,它用于检查名为“用户有上限”的功能。我们可以通过这个为投稿人添加“编辑其他文章”和“编辑已发布文章”。我这里有一个代码供您使用,您可以将其放在您的theme 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 );
希望这有帮助