如何使用 WordPress Setting API
像素鱼丸
4小时前
15
0

使用 WordPress 的 Setting API 是在插件或主题中创建和管理设置页面的标准方式。它提供了一种结构化、安全的方式来保存和获取用户配置的选项。


✅ 一、Setting API 简介

WordPress 的 Setting API 允许你:

  • 创建设置页面(Settings Page)
  • 注册设置字段(Settings Field)
  • 验证和保存设置数据
  • 使用表单提交来更新设置

✅ 二、基本步骤

1. 注册设置(register_setting)


function my_plugin_register_settings() {
    register_setting( 'my-plugin-settings-group', 'my_plugin_option_name' );
}
add_action( 'admin_init', 'my_plugin_register_settings' );
  • my-plugin-settings-group:设置组名称,用于分组
  • my_plugin_option_name:存储的选项名(通常与数据库中的 option_name 对应)

2. 添加设置页面(add_settings_section)


function my_plugin_add_settings_section() {
    add_settings_section(
        'my-plugin-main-section', // ID
        'My Plugin Settings',     // 标题
        'my_plugin_section_callback', // 回调函数(可选)
        'my-plugin'               // 页面 slug
    );
}
add_action( 'admin_init', 'my_plugin_add_settings_section' );

3. 添加设置字段(add_settings_field)


function my_plugin_add_settings_field() {
    add_settings_field(
        'my_plugin_field_id',       // ID
        'My Plugin Field',          // 标题
        'my_plugin_field_callback', // 回调函数
        'my-plugin',                // 页面 slug
        'my-plugin-main-section'    // section ID
    );
}
add_action( 'admin_init', 'my_plugin_add_settings_field' );

4. 回调函数(回调函数)

a. 设置字段显示内容


function my_plugin_field_callback() {
    $option = get_option('my_plugin_option_name');
    echo "<input type='text' name='my_plugin_option_name' value='" . esc_attr($option) . "' />";
}

b. 设置部分说明(可选)


function my_plugin_section_callback() {
    echo '<p>这是我的插件设置部分。</p>';
}

5. 创建设置页面(settings page)


function my_plugin_settings_page() {
    add_options_page(
        'My Plugin Settings',      // 页面标题
        'My Plugin',               // 菜单标题
        'manage_options',          // 权限
        'my-plugin',               // 页面 slug
        'my_plugin_render_settings_page'
    );
}
add_action('admin_menu', 'my_plugin_settings_page');
function my_plugin_render_settings_page() {
    ?>
    <div class="wrap">
        <h1>My Plugin Settings</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('my-plugin-settings-group'); // 输出隐藏的 nonce
            do_settings_sections('my-plugin');           // 输出所有设置段
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

✅ 三、完整示例代码


// 注册设置
function my_plugin_register_settings() {
    register_setting( 'my-plugin-settings-group', 'my_plugin_option_name' );
}
add_action( 'admin_init', 'my_plugin_register_settings' );
// 添加设置段
function my_plugin_add_settings_section() {
    add_settings_section(
        'my-plugin-main-section',
        'My Plugin Settings',
        'my_plugin_section_callback',
        'my-plugin'
    );
}
add_action( 'admin_init', 'my_plugin_add_settings_section' );
// 添加设置字段
function my_plugin_add_settings_field() {
    add_settings_field(
        'my_plugin_field_id',
        'My Plugin Field',
        'my_plugin_field_callback',
        'my-plugin',
        'my-plugin-main-section'
    );
}
add_action( 'admin_init', 'my_plugin_add_settings_field' );
// 设置部分回调
function my_plugin_section_callback() {
    echo '<p>这是我的插件设置部分。</p>';
}
// 设置字段回调
function my_plugin_field_callback() {
    $option = get_option('my_plugin_option_name');
    echo "<input type='text' name='my_plugin_option_name' value='" . esc_attr($option) . "' />";
}
// 添加设置页面
function my_plugin_settings_page() {
    add_options_page(
        'My Plugin Settings',
        'My Plugin',
        'manage_options',
        'my-plugin',
        'my_plugin_render_settings_page'
    );
}
add_action('admin_menu', 'my_plugin_settings_page');
function my_plugin_render_settings_page() {
    ?>
    <div class="wrap">
        <h1>My Plugin Settings</h1>
        <form method="post" action="options.php">
            <?php
            settings_fields('my-plugin-settings-group');
            do_settings_sections('my-plugin');
            submit_button();
            ?>
        </form>
    </div>
    <?php
}

✅ 四、获取设置值


$my_option = get_option('my_plugin_option_name');
echo esc_html($my_option);

✅ 五、验证和过滤设置值(可选)

你可以通过 register_setting 的第三个参数添加一个验证回调函数:


register_setting(
    'my-plugin-settings-group',
    'my_plugin_option_name',
    'my_plugin_validate_callback'
);
function my_plugin_validate_callback($input) {
    return sanitize_text_field($input); // 或其他验证逻辑
}

✅ 六、注意事项

  • 所有设置都保存在 WordPress 的 wp_options 表中。
  • 使用 settings_fields()do_settings_sections() 来生成表单结构。
  • 设置页面建议使用 add_options_page() 创建,这样会出现在“设置”菜单下。

✅ 七、进阶功能

  • 多个设置组(groups)
  • 多个设置页面
  • 自定义字段类型(如 checkbox, select, textarea)
  • 使用 sanitize_callback 过滤输入

如果你需要更复杂的设置(比如多选项卡、多组设置),可以使用 add_settings_section()add_settings_field() 多次调用。


📦 总结

步骤 函数 作用
注册设置 register_setting() 注册选项
添加设置段 add_settings_section() 添加设置区域
添加设置字段 add_settings_field() 添加具体设置项
渲染设置页面 add_options_page() 创建设置页面
获取设置值 get_option() 读取用户设置

如果你需要我帮你写一个完整的插件结构或者处理某个特定字段类型(比如 Checkbox、Select 等),也可以告诉我 😊

收藏
打赏
详解 WordPress 的评论设置
上一篇
没有了
下一篇

发表评论

注册不是必须的

像素鱼丸
148 文章
0 评论
4 喜欢
最新文章

如何使用 WordPress Setting API

使用 WordPress 的 Setting API 是在插件或主题中创建和管理设置页面的标准方式。它提供了一种结构化、安全的方式来保存和获取用户配置的选项。 ✅ 一、Setting API 简介 WordPress 的 Setting API 允许你: 创建设置页面(Settings Page) 注册设置字段(Settings Field) 验证和保存设置数据 使用表单提交来更新设置 ✅ 二、基 […]

详解 WordPress 的评论设置

好的,我们来详细梳理并总结 WordPress 中关于文章评论的两个核心控制层级:全局设置和单篇设置。理解这两者的关系(优先级)是管理网站评论的关键。 1. 全局设置 (Global Settings) —— 网站的“默认规则” 这是整个网站评论系统的总开关和默认行为准则。它决定了新发布的文章默认是什么样子的。 位置:WordPress 后台仪表盘 -> 设置 (Settings) -> […]

wp_handle_comment_submission 函数

wp_handle_comment_submission() 是 WordPress 中用于处理评论提交的核心函数之一。它通常在用户提交评论时被调用,负责验证和处理评论数据,并最终将评论插入到数据库中。 ✅ 函数作用 wp_handle_comment_submission() 的主要功能是: 验证用户提交的评论数据(如评论内容、用户名、邮箱等) 检查是否为垃圾评论(通过 Akismet 或其他过 […]

Mirage 主题 v2.89.0 发布

Mirage 主题 v2.89.0 发布 feat 懒加载图片增加灰色背景颜色 refactor 移除一些无用的js文件 fix 优化卡片列表样式 feat 如果设置里删除logo,就直接显示网站名称 fix 修复pc下拉菜单宽度的一个样式bug fix 修复未登录用户取消喜欢时产生的一个错误 fix 优化 wp_vt_star 表结构 下载地址:https://gitee.com/vthemec […]
生成中...
扫描二维码
扫描二维码
用户登录