MySQL8升级测试时OptionTree插件PHP数组偏移错误求助
解决OptionTree插件的数组偏移访问警告
错误原因
警告触发的核心是$section变量并非预期的数组类型,而是布尔值false。问题出在$this->get_sections($page)方法在某些场景下返回了false,代码里通过(array)强制转换后,循环会把false当作一个元素处理,此时访问$section['id']和$section['title']自然会触发数组偏移访问警告。
修复方案
方案1:修改插件代码(快速解决)
找到class-ot-settings.php文件中的add_sections方法,修改循环部分的代码,先验证get_sections的返回值是否为有效数组,再执行循环:
public function add_sections() { // Loop through options. foreach ( (array) $this->options as $option ) { // Loop through pages. foreach ( (array) $this->get_pages( $option ) as $page ) { // 获取sections并验证有效性 $sections = $this->get_sections( $page ); if ( is_array( $sections ) && !empty( $sections ) ) { // Loop through page sections. foreach ( $sections as $section ) { // Add each section. add_settings_section( $section['id'], $section['title'], array( $this, 'display_section' ), $page['menu_slug'] ); } } } } return false; }
方案2:不修改插件代码(推荐,避免更新失效)
在当前主题的functions.php文件中添加以下代码,通过WordPress钩子过滤get_sections的返回值,确保始终返回数组:
add_filter( 'ot_get_sections', function( $sections, $page ) { // 若返回值不是数组,则返回空数组 return is_array( $sections ) ? $sections : array(); }, 10, 2 );
方案3:优化get_sections方法(根源修复)
如果能找到get_sections方法的定义(同样在OptionTree插件的文件中),将方法中所有返回false的语句替换为返回空数组array(),从根源上避免非数组返回值:
比如把类似return false;的代码改成return array();。
内容的提问来源于stack exchange,提问作者Jane
相关产品推荐
相关产品推荐

