[WordPress]插件选项页编写

function qnnp_sanitize($str){
	return $str;
}

#初始化插件
add_action('admin_init', 'my_plugin_init');
function my_plugin_init(){
	$my_option_1_args = array(
		'type'				=>	'string', 			#此选项值得类型
		'description'		=>	'',					#描述
		'sanitize_callback'	=>	'qnnp_sanitize',	#过滤函数
		'show_in_rest'		=>	false,				#是否可以通过 REST API 读取
		'default'			=>	'default value'		#此选项的默认值
	);
	register_setting( 'my_plugin_option', 'my_plugin_option_1', $my_option_1_args );
}

#添加后台菜单
add_action('admin_menu', 'my_menu');
function my_menu(){
#添加主菜单页面,和评论等菜单平级
	add_menu_page(
		'page_title',					#页面标题
		'我的插件',						#菜单显示名称
		'manage_options',				#权限
		'my_plugin_page_1',				#Slug(admin.php?page={Slug}),或者'my_plugin/page.php'下一项设为空值
		'my_plugin_page_1_callback',	#此菜单页面函数名('my_plugin/page.php'的内容和此函数内容一样)
		'icon_url',						#菜单图标
		'25'							#菜单位置
	);

#添加子菜单
	add_submenu_page(
		'my_plugin_page_1',				#父级菜单的Slug或者路径('my_plugin/page.php')
		'page_title',					#子菜单页面标题
		'menu_title',					#子菜单显示名称
		'manage_options',				#权限
		'my_plugin_page_2',				#Slug(admin.php?page={Slug})
		'function'						#此菜单页面函数名
	);

/* #直接向“设置”菜单下添加子菜单和页面
	add_options_page(
		'page_title',					#菜单页面标题
		'menu_title',					#菜单显示名称
		'manage_options',				#权限
		'my_plugin_page_1',				#Slug(admin.php?page={Slug})
		'function'						#菜单页面内容
	);
*/
/* #添加一个选项段落
	add_settings_section(
		'my_section_1',					#选项段落ID
		'Title',						#选项段落名称
		'callback',						#段落 callback 用于显示内容
		'my_plugin_page_1'				#Slug(admin.php?page={Slug})
	);
*/
/* #为选项段落添加一个选项行
	add_settings_field(
		'my_field_1',					#选项ID
		'选项 1',						#选项标题
		'my_field_1_callback',			#选项 callback 用于显示内容
		'my_plugin_page_1',				#Slug(admin.php?page={Slug})
		'my_section_1',					#添加到的选项段落ID
		array(
			'label_for' => 'string',	#Label 标签的 For 属性
			'class' => 'string'			#此选项包裹 Class
		)
	);
*/
}
function my_field_1_callback(){
	$setting = get_option('my_plugin_option_1');
	$setting = esc_attr($setting);
	echo '
		<input
			type="text"
			name="my_plugin_option_1"
			value="'. $setting .'"
		/>
	';
}