我有一个名为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\'`)
退货
没错(但对每一篇文章来说,不仅仅是对他而言)。
有什么帮助吗?
最合适的回答,由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.
}