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

如何在WordPress插件设置保存前进行条件化验证?

WordPress 插件设置页条件校验与错误提示实现方案

你当前使用的 WordPress Settings API 的 sanitize 回调本身就是自定义校验的最佳挂载点,不需要额外引入其他处理流程,配合原生错误提示机制即可完整实现需求,具体实现步骤如下:

具体实现步骤

  • 步骤1:在 sanitize 回调中补充校验逻辑
    你现在用来做输入清理的函数,就是注册设置时传入的 sanitize_callback 对应函数,直接在这个函数里追加校验规则即可,校验不通过时调用 add_settings_error() 抛出错误,同时不要将非法值存入配置,可选择保留上一次的合法值。
// 函数名替换为你自己注册设置时绑定的sanitize回调函数名
function stwc_settings_sanitize( $input ) {
    // 先获取数据库中已保存的旧配置,校验不通过时可以 fallback 到旧值
    $old_options = get_option( 'stwc_settings_options' );
    $sanitary_values = [];

    // 原有清理逻辑保留
    if ( isset( $input['stwc_ft_oosn_notice_1'] ) ) {
        $sanitary_values['stwc_ft_oosn_notice_1'] = sanitize_text_field( $input['stwc_ft_oosn_notice_1'] );
    }

    // ---------------- 新增自定义校验逻辑 ----------------
    // 示例1:判断复选框勾选时,对应文本框不能为空
    $is_checked = isset( $input['stwc_ft_oosn_enable'] ) && 'yes' === $input['stwc_ft_oosn_enable'];
    if ( $is_checked && empty( $sanitary_values['stwc_ft_oosn_notice_1'] ) ) {
        // 抛出错误:第一个参数为你设置页的slug(即do_settings_sections的参数),第二个为错误ID,第三个为错误提示内容,第四个为错误类型
        add_settings_error(
            'settings-admin',
            'stwc_oosn_notice_empty',
            '启用缺货通知功能时,通知文本内容不能为空',
            'error'
        );
        // 校验不通过, fallback 到旧值,避免空值覆盖原有配置
        $sanitary_values['stwc_ft_oosn_notice_1'] = $old_options['stwc_ft_oosn_notice_1'] ?? '';
    }

    // 示例2:校验字段必须为正整数
    if ( isset( $input['stwc_ft_oosn_limit'] ) ) {
        $num = intval( $input['stwc_ft_oosn_limit'] );
        if ( $num <= 0 ) {
            add_settings_error(
                'settings-admin',
                'stwc_oosn_limit_invalid',
                '可通知上限必须为大于0的正整数',
                'error'
            );
            $sanitary_values['stwc_ft_oosn_limit'] = $old_options['stwc_ft_oosn_limit'] ?? 10;
        } else {
            $sanitary_values['stwc_ft_oosn_limit'] = $num;
        }
    }

    return $sanitary_values;
}
  • 步骤2:确认错误提示正常显示
    WordPress 默认会在使用 Settings API 的设置页顶部自动输出 add_settings_error() 抛出的提示,如果你当前页面没有自动显示,可以在你设置页的表单代码开头手动调用输出函数即可:
<form method="post" action="options.php">
    <?php
        // 手动输出设置错误提示,加在settings_fields之前即可
        settings_errors( 'settings-admin' );
        settings_fields( 'settings_option_group' );
        do_settings_sections( 'settings-admin' );
        submit_button();
    ?>
</form>
  • 步骤3:实现错误字段红色边框效果
    你可以在输出每个设置字段的回调函数中,判断对应字段是否有抛出错误,给输入框追加错误样式类,再通过后台CSS实现红框效果。
    首先是字段输出回调的示例:
// 函数名替换为你输出stwc_ft_oosn_notice_1字段的回调函数名
function stwc_output_notice_1_field() {
    $options = get_option( 'stwc_settings_options' );
    $value = $options['stwc_ft_oosn_notice_1'] ?? '';
    // 判断当前字段是否有对应错误
    $has_error = ! empty( get_settings_errors( 'stwc_oosn_notice_empty' ) );
    $class = $has_error ? 'regular-text stwc-field-error' : 'regular-text';
    ?>
    <input type="text" name="stwc_settings_options[stwc_ft_oosn_notice_1]" class="<?php echo esc_attr( $class ); ?>" value="<?php echo esc_attr( $value ); ?>">
    <?php
}

然后追加后台CSS,通过admin_enqueue_scripts钩子加载:

function stwc_enqueue_admin_css( $hook ) {
    // 只在你的设置页加载CSS,$hook的值可以通过后台页面地址的page参数判断,这里示例为settings_page_settings-admin
    if ( $hook !== 'settings_page_settings-admin' ) {
        return;
    }
    wp_add_inline_style( 'wp-admin', '.stwc-field-error { border-color: #dc3232 !important; box-shadow: 0 0 0 1px #dc3232 !important; }' );
}
add_action( 'admin_enqueue_scripts', 'stwc_enqueue_admin_css' );
  • 可选补充:前端预校验
    你可以额外加一段JS在设置页做前端预校验,用户提交表单时就提示错误,减少后端请求,但注意前端校验仅做体验优化,后端校验必须保留,避免恶意请求绕开前端规则。

内容的提问来源于stack exchange,提问作者Jason 'Slingshot' Miller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 12:36:04