哎哟,这个问题很难解决;-)然而,问题是,你必须在这里深入挖掘。
功能current_user_can()
战后使用了许多不同的功能,但您可以筛选user_has_cap
, 它基本上检查登录用户是否具有特定功能(duh)。
As投稿人(默认情况下)可以编辑状态为publish
(如果我错了,请纠正我,我没有检查trash
), 此外,加载管理屏幕时会多次检查功能,在返回错误之前,我们必须检查一些不同的内容:
用户可以edit_posts
首先`是要编辑的帖子的状态future
?用户是否要编辑帖子或创建新帖子,帖子是否由url设置?(可能是因为职位地位最不重要)
如果没有post(通过$_GET[\'post\']
) 设置后,过滤器可以不受限制地继续。
之后,您必须检查post_status
如果行动(通过$_GET[\'action\']
) 是真正的“编辑”,当然,如果首先允许当前用户进行编辑。
add_filter( \'user_has_cap\', \'f711_restrict_editing_future\', 1, 3 );
function f711_restrict_editing_future ( $allcaps, $cap, $args ) {
// check if a post ist set
if ( !isset( $_GET[\'post\'] ) ) return $allcaps;
// get the post
$thispost = get_post( (int) $_GET[\'post\'] );
// check everything else
if ( $cap[0] == \'edit_posts\' && $thispost->post_status == \'future\' && $_GET[\'action\'] == \'edit\' && $allcaps[\'contributor\'] == 1 ) {
wp_die( \'post is scheduled\' );
}
return $allcaps;
}
问题此筛选用户角色的功能只会在用户想要编辑未来帖子时进行检查。您可能还需要过滤帖子列表,以避免首先显示指向帖子的链接。
第二个问题是,此解决方案取决于具有contributor
. 如果要获得此问题的一般解决方案,您可能还需要调整这些设置。
然而,为了回答你的问题-with this function you prevent contributors to edit future posts
这不是最优雅的方式,但我希望你能有所改变:-)