WordPress按日期切换头部图片的PHP代码是否存在问题?
现有代码存在的问题
- 日期比较逻辑错误:你用
d-m格式的字符串直接做大小比较,PHP会按字符逐位对比,会出现逻辑错乱,比如15-01(1月15日)字符串第一位是1,比02-02(2月2日)的第一位0大,会被判定为15-01 > 02-02,完全不符合实际日期先后。 - 循环输出逻辑错误:你在
foreach循环里每遍历一个事件就输出一次图片,会出现多图叠加的问题:如果当前日期不在任何事件范围内,会输出和事件数量一致的多张默认图;如果刚好匹配到某一个事件,会输出1张活动图加其余事件对应的默认图,不符合头部只显示一张图的需求。 - 路径不规范:直接写相对路径在WordPress站点部署在子目录、伪静态规则配置变化时很容易出现404,建议用WordPress官方提供的路径函数生成绝对路径。
- 输出安全问题:直接输出图片路径到img标签的src属性没有做转义,存在XSS安全隐患。
修正后可正常运行的代码
$holiday_events = array( array( 'image' => '1.png', // 仅需保存uploads目录下的文件名即可 'start' => '01-02', 'end' => '02-02' ), array( 'image' => '2.png', 'start' => '03-02', 'end' => '04-02' ) ); $current_date = date('md'); // 转换为月日拼接的数字格式,比较不会出现逻辑错误 $header_image = 'default header image'; // 默认头部图文件名 // 遍历匹配符合日期范围的事件 foreach($holiday_events as $event) { // 把事件的起止日期也转换为md格式的数字 $start = str_replace('-', '', $event['start']); $end = str_replace('-', '', $event['end']); if($current_date >= $start && $current_date <= $end) { $header_image = $event['image']; break; // 匹配到符合的事件直接跳出循环,避免后续逻辑覆盖 } } // 统一输出一张头部图片,用WordPress官方函数生成uploads目录的绝对路径,属性做转义处理 $upload_dir = wp_get_upload_dir(); $img_url = $upload_dir['baseurl'] . '/' . $header_image; echo '<img src="' . esc_attr($img_url) . '" alt="站点头部图">';
内容的提问来源于stack exchange,提问作者WSP Webmaster
相关产品推荐
相关产品推荐

