如何永久修改Wordpress的wp-admin/post.php?



要使用第三方插件来解决愚蠢,我必须为订户级用户提供一些我不希望它们实际具有的编辑功能。(这不能使他们可以访问编辑链接,但是如果他们很聪明,他们可以直接访问编辑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更新时都需要重新完成。是否可以通过过滤器或类似的方式以更永久的方式应用此修复程序?

您无需修改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);

上面的注释有效。

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');

最新更新