CURRENT_USER_CAN(‘EDIT_POST’,$POST_ID)不适用于贡献者,而适用于管理员

时间:2015-06-23 作者:Pmpr

我有一个名为project 其中

\'capability_type\' => \'post\'
使用注册时register_post_type.

在我的主题文件中functions.php 文件中,我需要检查要编辑的项目是否由用户编写。

所以我用这个:

if ( !current_user_can( \'edit_post\', $porject_id ) ) return;
在哪里$project_id 是要编辑的项目的帖子id。

例如,我有一个名为single_project.php 我可以向用户显示项目帖子类型中的单个帖子,我希望这些人可以看到每个项目的单个页面:

管理员、编辑、投稿人(post author)但是使用上述代码,管理员和编辑都可以,而投稿人自己则不行!

使用时:

var_dump( current_user_can( \'edit_post\', $project_id ) )
当出资人登录帐户时,它会返回

错误的

虽然

var_dump( current_user_can( \'edit_posts\' ) )` (with trailing `\'s\'`)
退货

没错(但对每一篇文章来说,不仅仅是对他而言)。

有什么帮助吗?

2 个回复
最合适的回答,由SO网友:Pmpr 整理而成

使用map_meta_cap 我补充道edit_post 每个用户的帖子上限

function my_map_meta_cap( $caps, $cap, $user_id, $args ){
    if ( \'edit_post\' == $cap ) {
        $post = get_post( $args[0] );
        $post_type = get_post_type_object( $post->post_type );
        $caps = array();
        if ( $user_id == $post->post_author )
            $caps[] = $post_type->cap->edit_posts;
        else
            $caps[] = $post_type->cap->edit_others_posts;
    }
    return $caps;
}
add_filter( \'map_meta_cap\', \'my_map_meta_cap\', 10, 4 );

SO网友:Jacob Peattie

这是一个非常晚的答案,但被接受的答案是不正确的,我看到其他用户引用它,所以我提交了正确的答案。

参与者用户看到的原因false 对于edit_post 投稿人不能编辑已经发布的帖子。仅具有的角色edit_published_posts 我能做到。

在最初的问题中,作者说:

在某些情况下,我应该检查要编辑的项目是否由用户编写。

这与用户是否可以编辑帖子相同,这是他们的代码实际上正在检查的内容。如果要检查帖子的作者是否是特定用户,则应进行比较:

if ( get_current_user_id() === get_post_field( \'post_author\', $project_id ) ) {
    // etc.
}

结束

相关推荐

About Wordpress capabilities

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