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

WordPress插件如何实现同一设置字段存储多组分类折扣配置

实现多组分类折扣配置存储方案

核心调整思路

  • 将原单值存储改为二维数组结构存储,每个子元素对应一组「分类别名+折扣比例」配置
  • 表单字段名修改为数组格式,提交时WordPress会自动解析为数组结构
  • 在配置 sanitize 回调中处理数据,将新提交的配置追加到原有配置数组中,避免覆盖旧数据

1 修改字段渲染函数

同时输出已有配置列表+新增配置的输入框:

function cat_discount_render() { 
    $options = get_option( 'slug-configuration', [] );
    // 先输出已保存的所有配置
    if ( ! empty( $options ) ) {
        echo '<h4>已保存的配置:</h4>';
        echo '<ul style="margin:10px 0 20px 20px;">';
        foreach ( $options as $index => $item ) {
            printf( 
                '<li>分类别名:%s | 折扣比例:%s%%</li>',
                esc_html( $item['cat_slug'] ),
                esc_html( $item['discount_percentage'] )
            );
        }
        echo '</ul>';
    }
    // 输出新增配置的输入框
    ?>
    <div style="display:flex;gap:10px;align-items:center;">
        <input type='text' placeholder="输入分类别名" size="30" name='slug-configuration[new][cat_slug]' value=''>
        <input type='number' min="0" max="100" placeholder="折扣比例" size="10" name='slug-configuration[new][discount_percentage]' value=''>
    </div>
    <?php
}

2 修改字段注册代码

替换原来的单字段注册,合并为同一个配置项渲染:

add_settings_field(
    'cat_discount_group', // 字段ID
    '分类折扣配置',  // 字段标题
    'cat_discount_render', // 渲染回调
    'slug-configuration', // 所属设置页面
    'configuration' // 所属设置分区
);

3 新增数据保存逻辑

在register_setting的净化回调中处理追加逻辑:

// 注册设置时添加sanitize回调
register_setting(
    'slug-configuration', // 配置组名
    'slug-configuration', // 配置项名
    'sanitize_cat_discount_config' // 数据净化回调
);

// 净化+追加数据的回调函数
function sanitize_cat_discount_config( $input ) {
    // 获取原有配置
    $old_options = get_option( 'slug-configuration', [] );
    // 检查是否有新提交的配置
    if ( isset( $input['new'] ) && ! empty( $input['new']['cat_slug'] ) && is_numeric( $input['new']['discount_percentage'] ) ) {
        // 新配置去重(可选,根据需求开启)
        $exists = false;
        foreach ( $old_options as $item ) {
            if ( $item['cat_slug'] === $input['new']['cat_slug'] ) {
                $exists = true;
                add_settings_error( 'slug-configuration', 'duplicate-slug', '该分类别名已存在配置' );
                break;
            }
        }
        if ( ! $exists ) {
            // 新配置格式校验后追加到数组
            $new_item = [
                'cat_slug' => sanitize_text_field( $input['new']['cat_slug'] ),
                'discount_percentage' => intval( $input['new']['discount_percentage'] )
            ];
            $old_options[] = $new_item;
        }
    }
    // 返回最终要保存的配置
    return $old_options;
}

调用方式示例

后续你需要读取所有配置使用时,直接调用即可:

$all_discount_config = get_option( 'slug-configuration', [] );
foreach ( $all_discount_config as $config ) {
    $cat_slug = $config['cat_slug'];
    $discount = $config['discount_percentage'];
    // 你的业务逻辑
}

内容的提问来源于stack exchange,提问作者Zaffar Saffee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 13:54:04