插件选项保存的常见误区:为什么你的配置项总被覆盖?
很多开发者在处理插件选项保存时都踩过这个坑:当插件有多个配置项时,如果直接使用update_option逐个保存,会导致其他配置项被意外覆盖。来看这段典型错误代码:
// ❌ 错误写法
add_action('admin_init', function() {
if(isset($_POST['option1'])){
update_option('myplugin_settings', sanitize_text_field($_POST['option1']));
}
if(isset($_POST['option2'])){
update_option('myplugin_settings', sanitize_text_field($_POST['option2']));
}
});
上面代码的问题在于每次update_option都会完全替换整个选项值。当用户只修改option2时,option1的值会被覆盖成空值。正确的做法应该是先获取现有配置,再合并新值:
// ✅ 正确做法
add_action('admin_init', function() {
$current = get_option('myplugin_settings', []);
if(isset($_POST['option1'])){
$current['option1'] = sanitize_text_field($_POST['option1']);
}
if(isset($_POST['option2'])){
$current['option2'] = sanitize_text_field($_POST['option2']);
}
update_option('myplugin_settings', $current);
});
更健壮的实现建议加上nonce验证和权限检查,核心要点是:永远先get_option获取完整配置数组,修改对应字段后再整体update_option,这才是WordPress选项保存的标准姿势。
最新打赏

