WordPress 插件设置页:Settings API 还是自己写表单

· wordpress · 阅读 7
摘要

做一个插件设置页有两条路,选错了会多写几百行代码。路线一:Settings API(推荐)适合“若干个输入框/开关/下拉”这种常规配置。好处是提交、校验、CSRF、提示全部自动处理。add_action('admin_init', func

做一个插件设置页有两条路,选错了会多写几百行代码。

路线一:Settings API(推荐)

适合“若干个输入框/开关/下拉”这种常规配置。好处是提交、校验、CSRF、提示全部自动处理。

add_action('admin_init', function(){
    register_setting('mfp_group', 'mfp_options', [
        'sanitize_callback' => 'mfp_sanitize',
    ]);
    add_settings_section('mfp_main', '基础设置', null, 'mfp');
    add_settings_field('mfp_api_key', 'API Key', function(){
        $opts = get_option('mfp_options', []);
        printf(
            '<input type="text" name="mfp_options[api_key]" value="%s">',
            esc_attr($opts['api_key'] ?? '')
        );
    }, 'mfp', 'mfp_main');
});

三条要点:选项用数组存,一个 option 装全部配置,减少数据库行数;sanitize_callback 必写;字段 name 用 options[键名] 形式。

路线二:手写表单

适合需要多标签页、实时预览、拖拽排序这类复杂交互。这种情况下 Settings API 反而碍事。

手写时必须自己补齐:

  • wp_nonce_field() 防 CSRF
  • current_user_can('manage_options')
  • 每个字段的类型校验与转义
  • 保存后跳转避免刷新重复提交

怎么选

有没有复杂交互是唯一标准。三个输入框用 Settings API 十分钟搞定;做拖拽排序就老老实实手写。

菜单注册

两种都要先有菜单:add_options_page() 挂到设置下,或 add_menu_page() 建独立菜单。回调里输出表单 HTML 即可。