You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 09:48:04