WordPress二次开发之插件权限控制

2022-09-14 15:22:34 浏览数 (2)

以字体样式插件为例,我们在添加菜单时设置了参数 manage_options 表示有这个权限的角色才能创建该菜单,而这个权限只有管理员才有,只有管理员登录时才能看到该菜单 ,这是一种方式

代码语言:javascript复制
add_menu_page(
    '字体颜色',
    '字体颜色',
    'manage_options',
    'my_menus',
    array($this,'my_settings_page')
);

current_user_can 第二种方式 通过current_user_can('root')判断用户是否具备某权限

代码语言:javascript复制
if(!current_user_can('edit_posts'))return
add_menu_page(
    '字体颜色',
    '字体颜色',
    'manage_options',
    'read',
    array($this,'my_settings_page')
);

虽然将菜单的权限设置为read(任何用户都能看见)但只要该用户没有edit_posts权限那么他也看不到该菜单

除了用户权限的控制,我们还希望脚本文件,css文件等也受到控制,默认情况下插件引入的js文件会作用域全局,也就是插件的js代码在当前插件页面有效,在后台其他页面甚至前台也会有效,这不符合常理,因此可以通过 get_current_screen来进行处理

代码语言:javascript复制
public function __construct()
    {
        add_action('admin_init',array($this,'register_my_test_setting'));
        add_action('wp_head',array($this,'my_test_head_fun'));
        
        
        add_action('admin_enqueue_scripts',array($this,'load_script'));
       
        //处理ajax 钩子
        add_action('wp_ajax_my_color_check', array($this,'color_check_fun'));
        add_action('wp_ajax_my_test',array($this,'my_test'));
        //插件本地化
        add_action('init',array($this,'my_load_textdomain'));

    }
    public function load_script(){
        $screen = get_current_screen();//获取当前页面信息
     
        if(is_object($screen) && $screen->id === 'options-general'){
             //引入js
        wp_enqueue_script('my_test',plugins_url('js/my_test.js',__FILE__),array('jquery'));
        //注册ajax处理页面 第一个参数必须相同
        wp_localize_script('my_test','ajax_object',array('ajax_url'=>admin_url('admin-ajax.php')));

        }
    }

我们向 admin_enqueue_scripts钩子添加处理函数 ,在函数体内判断当前页面id,如果为 options-general则加载js文件,这样js文件只作用域当前插件页面

0 人点赞