未定义的偏移量:最新版本升级后 WordPress 中的 0

问题描述

我的 wordpress 网站一直运行良好,但是在最新升级到 5.6.2 和 5.7 之后,我遇到了一个主要问题,实际上破坏了网站的一个重要部分,我查看了日志并发现了以下错误:

    [14-Mar-2021 00:29:32 UTC] PHP Notice:  Undefined offset: 0 in /var/www/html/wp-content/plugins/tours/includes/class-tours-tour-post-type.PHP on line 1709
    [14-Mar-2021 00:29:32 UTC] selected_original_tours: 

有问题的代码似乎如下:

    if($show_filter) {
        $selected_destinations = isset($_GET['destinations']) ? explode(',',$_GET['destinations']) : [];
        $selected_tourstyles = isset($_GET['tourstyles']) ? explode(',$_GET['tourstyles']) : [];
        write_log('selected_original_tours: ' . $selected_tourstyles[0]);
        for($i = 0; $i < count($selected_tourstyles); $i++) {
            $selected_tourstyles[$i] = str_replace('and','&',$selected_tourstyles[$i]);
            $selected_tourstyles[$i] = str_replace('_',' ',$selected_tourstyles[$i]);
            write_log('Selected_tourstyles:' . $selected_tourstyles[$i]);
        }
        
        $selected_dates = isset($_GET['dates']) ? explode(',$_GET['dates']) : [];
    }

有问题的行将是这一行:

    write_log('selected_original_tours: ' . $selected_tourstyles[0]);

我该如何解决这个问题或更改受影响的代码以使我的函数再次工作?一些专家的建议将不胜感激。

解决方法

我会在 for 语句中移动 write_log 并用 i 替换 0,所以它变成:

// write_log('selected_original_tours: ' . $selected_tourstyles[0]);

如果它不存在,则没有错误。

老实说,虽然我觉得日志的写法很奇怪。为什么你需要记录哪个被选中?