如何为WordPress后台设置的多个字段配置同一个sanitization回调
方案实现
如果多个字段的清理逻辑完全一致,直接给所有register_setting的sanitize_callback参数传入同一个回调函数名即可,回调的第一个参数$input会自动传入对应字段的输入值,不会出现字段值混淆的问题。
示例修改后代码如下:
add_action('admin_init','settings'); function settings(){ add_settings_section('menu_first_section',null,null,'plugin-menu'); add_settings_field('field_1','Field 1','field_1_html','plugin-menu','menu_first_section'); register_setting('option_group_1','field_1',array('sanitize_callback' => 'my_unified_sanitize','default'=> '')); add_settings_field('field_2','Field 2','field_2_html','plugin-menu','menu_first_section'); register_setting('option_group_2','field_2',array('sanitize_callback' => 'my_unified_sanitize','default'=> '')); } // 统一的清理回调 function my_unified_sanitize($input) { // 通用清理逻辑,此处示例为文本字段清理,可根据需求修改 $input = sanitize_text_field(trim($input)); return $input; }
差异化处理扩展
如果需要针对不同字段做特殊校验/清理,可以利用sanitize_callback自动传入的第二个参数$option_name(当前注册的选项名)做分支判断:
function my_unified_sanitize($input, $option_name) { // 先执行通用清理逻辑 $input = sanitize_text_field(trim($input)); // 按字段名做差异化处理 switch ($option_name) { case 'field_1': // 示例:field_1要求为正整数 $input = absint($input); break; case 'field_2': // 示例:field_2要求为合法邮箱 $input = is_email($input) ? $input : ''; break; } return $input; }
内容的提问来源于stack exchange,提问作者Shakti Goyal
相关产品推荐
相关产品推荐

