WordPress插件自定义选项升级后重置网站出现数组偏移错误
问题解决:WordPress调用自定义选项触发"array offset on bool"警告
问题背景
使用GitHub上的RationalOptionPages类开发WordPress插件自定义选项,重置网站前运行正常,重置后出现如下警告:
Notice: Trying to access array offset on value of type bool
错误路径:C:\xampp\htdocs\wordpress\wp-content\plugins\redux-framework\init.php第3行
所有选项调用都会触发该警告,保存一次选项后警告消失。当前调用选项的代码为:
$opt_sectionas = get_option('sample-page')['asp_section_option']; $opt_carousel = get_option('sample-page')['asp_carousel_option']; $opt_animate = get_option('sample-page')['asp_animate_aos_option']; $opt_columns = get_option('sample-page')['asp_advance_columns_option'];
问题原因
重置网站后,sample-page这个选项尚未被初始化到数据库中,此时get_option('sample-page')会返回false(而非预期的数组)。直接对布尔值false进行数组索引操作,就会触发该警告。
当保存一次选项后,WordPress会将sample-page对应的选项数组写入数据库,此时get_option返回正常数组,警告自然消失。
解决方案
方案1:先校验再取值(兼容PHP低版本)
先获取选项集合,再通过isset校验索引是否存在,不存在则设置默认值:
$sample_options = get_option('sample-page'); $opt_sectionas = isset($sample_options['asp_section_option']) ? $sample_options['asp_section_option'] : ''; $opt_carousel = isset($sample_options['asp_carousel_option']) ? $sample_options['asp_carousel_option'] : ''; $opt_animate = isset($sample_options['asp_animate_aos_option']) ? $sample_options['asp_animate_aos_option'] : ''; $opt_columns = isset($sample_options['asp_advance_columns_option']) ? $sample_options['asp_advance_columns_option'] : '';
方案2:使用空合并运算符简化(PHP 7.0+)
先给get_option设置默认空数组,再用??运算符快速取默认值:
$sample_options = get_option('sample-page') ?? []; $opt_sectionas = $sample_options['asp_section_option'] ?? ''; $opt_carousel = $sample_options['asp_carousel_option'] ?? ''; $opt_animate = $sample_options['asp_animate_aos_option'] ?? ''; $opt_columns = $sample_options['asp_advance_columns_option'] ?? '';
方案3:优化插件初始化逻辑
检查RationalOptionPages的插件激活代码,添加自动初始化默认选项的逻辑,确保网站重置后,插件激活时就将sample-page的默认选项写入数据库,避免选项缺失。
内容的提问来源于stack exchange,提问作者Fernando
相关产品推荐
相关产品推荐

