为了解决第三方插件的愚蠢问题,我不得不为订阅者级用户提供一些我不希望他们真正拥有的编辑功能。 (这不允许他们访问编辑链接,但如果他们聪明,他们可以直接访问编辑URL。)由于我的网站只有订阅者和管理用户,我可以通过简单修改wp-admin中的功能检查来解决问题/post.php需要订阅者不具备的额外功能,如下所示:
if ( ! current_user_can( 'edit_post', $post_id ))
wp_die( __( 'Sorry, you are not allowed to edit this item.' ) );
变为:
if ( ! current_user_can( 'edit_post', $post_id ) OR ! current_user_can('edit_pages'))
wp_die( __( 'Sorry, you are not allowed to edit this item.' ) );
这非常有效,但我知道它会被覆盖,每次Wordpress更新时都需要重新完成。有没有办法通过过滤器或类似工具以更永久的方式应用此修复程序?
答案 0 :(得分:1)
您不需要修改post.php文件。在functions.php中使用此代码:
add_filter('user_has_cap',function($allcaps,$need_caps, $args) {
if ($_SERVER['SCRIPT_NAME']=='/wp-admin/post.php' && isset($_GET['action']) && $_GET['action']=='edit' && $args[0]=='edit_post' && ! current_user_can('edit_pages')) {
foreach ($need_caps as $cap) {
unset($allcaps[$cap]);
}
}
return $allcaps;
},10,3);
答案 1 :(得分:0)
以上评论有效....所以这样做,只需添加到您的函数文件中。
function authority_check(){
global $pagenow;
if(is_admin() && !current_user_can('manage-capabilities')){
if(in_array($pagenow,array('post.php')) || in_array($pagenow, array('post-new.php'))){
wp_die(__( 'Sorry, you are not allowed to edit this item.'));
}
}
}
add_action('admin_init', 'authority_check');