以字体样式插件为例,我们在添加菜单时设置了参数 manage_options 表示有这个权限的角色才能创建该菜单,而这个权限只有管理员才有,只有管理员登录时才能看到该菜单 ,这是一种方式
代码语言:javascript复制add_menu_page(
'字体颜色',
'字体颜色',
'manage_options',
'my_menus',
array($this,'my_settings_page')
);
current_user_can 第二种方式 通过current_user_can('root')
判断用户是否具备某权限
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
来进行处理
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文件只作用域当前插件页面