我正在尝试使任何已标记并以特定状态保存的帖子不被编辑器用户编辑。
我正在使用一个自定义插件,该插件扩展了状态以包括子Bing,然而,目前我只是尝试在那里获得功能,所以我使用发布状态。
有人能看到我下面的代码有什么问题吗?
据我所知,我正在分配publish
状态和editor
用户访问变量,检查这些是否为真,然后删除编辑功能,然后在发布帖子之前将其挂接。
// Restrict editors making changes to articles after tagged published
function restrict($new_status, $post){
$pub = get_post_status($post) == \'publish\';
$editor = get_role(\'editor\');
if ($new_status == $pub && (current_user_can(\'edit_post\'))){
remove_cap($editor, \'edit_posts\');
}
}
add_action(\'publish_post\', \'restrict\', 10, 2);
最合适的回答,由SO网友:TheDeadMedic 整理而成
不要删除该功能-这将使所有编辑器无法编辑所有帖子。相反,使用过滤器有条件地确定是否可以编辑帖子:
function wpse_187738_map_meta_cap( $caps, $cap, $user_ID, $args ) {
if ( $cap === \'edit_post\' && $args && ! current_user_can( \'manage_options\' ) /** Only proceed for non-administrators */ ) {
$post_id = $args[0];
if ( has_tag( \'tag_slug_or_id\', $post_id ) )
$caps[] = \'not_allowed\';
}
return $caps;
}
add_filter( \'map_meta_cap\', \'wpse_187738_map_meta_cap\', 10, 4 );