You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 09:54:05