问题
我在一个网站上工作,我们需要能够在自定义帖子类型的自定义字段中输入用户名,并允许指定的用户更改该帖子,并且只更改该帖子。我想
user_has_cap
可能是要使用的过滤器挂钩,但奇怪的是,它似乎不允许用户更新帖子。
用户可以看到帖子的编辑屏幕,并且只有暗示我的过滤器工作正常的帖子,但单击更新会出现错误You are not allowed to edit posts as this user.
这与此相矛盾。
职位类型有capability_type => post
所以我觉得这不应该是问题所在。
代码
function event_cap_filter($all, $cap, $args) {
// if not requesting edit post then return caps
if(\'edit_post\' != $args[0]) return $all;
// if user can already edit others posts then return caps
if($all[\'edit_others_posts\']) return $all;
// if user is the post author then return caps
$post = get_post($args[2]);
if($args[1] == $post->post_author) return $all;
// query to find user in custom field
// and therefore if they are allowed to edit this post
if($can_edit) {
foreach($cap as $c) {
$all[$c] = true;
}
}
return $all;
}
add_filter(\'user_has_cap\', \'event_cap_filter\', 10, 3);
问题如果我的用户可以编辑在我检查的自定义字段中指定他的帖子,为什么他不能保存他的更改?我是否忽视了什么?
SO网友:Edemir Santos de Paula
我有一个类似的问题,需要有一个自定义字段来授予特定的人编辑其他用户创建的一些帖子、页面和自定义帖子类型的权限。我有一个包含用户的acf数组字段。解决了使用$\\u post[\'post\\u id\']和以下代码获取帖子id的问题:
function author_cap_filter( $allcaps, $cap, $args )
{
if(isset($_POST[\'post_ID\']))
{
$post_id = $_POST[\'post_ID\'];
$users = get_post_meta($post_id, \'add_people\', TRUE);
if(is_array($users) && in_array(wp_get_current_user()->ID,$users))
$allcaps[\'edit_others_posts\']=TRUE;
}
return $allcaps;
}
add_filter( \'user_has_cap\', \'author_cap_filter\', 10, 3 );