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

如何检查WordPress附件中的图片是否存在?小尺寸图片仅保留原图时的检测方案

嘿,针对你提出的两个WordPress图片检查问题,我结合你给出的代码片段来梳理解决方案,帮你搞定这些场景:

1. 检查WordPress附件中指定尺寸图片是否存在

要确认某个尺寸的图片是否存在,我们可以从数据库元数据记录和服务器实际文件两个维度入手——毕竟有时候数据库里有尺寸记录,但文件可能被意外删除。这里有两种实用方法:

方法一:用WordPress原生函数简化检查

wp_get_attachment_image_src()是WordPress自带的工具函数,它会自动帮我们做检查:如果目标尺寸的图片存在,返回包含URL、宽高的数组;如果不存在,直接返回false。示例代码如下:

// 假设$attachment_id是你的附件ID,$image_size是目标尺寸(比如'thumbnail'/'medium')
$image_data = wp_get_attachment_image_src($attachment_id, $image_size);

if ($image_data) {
    // 该尺寸图片存在,使用它的URL
    $image_lazy = $image_data[0];
} else {
    // 尺寸不存在, fallback到原始图片
    $image_lazy = wp_get_attachment_url($attachment_id);
}

方法二:手动检查元数据+文件存在性

如果你已经通过wp_get_attachment_metadata()获取了附件的元数据数组(也就是你代码里的$image),可以先检查sizes数组里是否有对应尺寸的键,再验证服务器上的文件是否真的存在:

$upload_dir = wp_upload_dir(); // 获取上传目录的路径和URL信息
$image_lazy = '';

if (!empty($image)) {
    if (isset($image['sizes'][$image_size])) {
        // 将图片URL转换为服务器本地路径
        $image_file_path = str_replace($upload_dir['baseurl'], $upload_dir['basedir'], $image['sizes'][$image_size]['url']);
        
        if (file_exists($image_file_path)) {
            // 文件存在,使用该尺寸的URL
            $image_lazy = $image['sizes'][$image_size]['url'];
        } else {
            // 文件丢失,用原始图片兜底
            $image_lazy = $image['url'];
        }
    } else {
        // 元数据里没有该尺寸的记录,直接用原始图片
        $image_lazy = $image['url'];
    }
}

2. 极小尺寸图片的对应尺寸检查处理

你提到上传50x50px的图片后,系统只保留原始文件——这是WordPress的默认规则:如果原始图片的宽/高小于你在后台设置的目标尺寸(比如thumbnail默认是150x150),系统就不会生成该尺寸的缩略图,直接跳过。

针对这种场景,我们只需要在代码里先判断目标尺寸是否存在于元数据的sizes数组中,不存在就直接使用原始图片即可。我帮你修复了原代码的语法问题,并加入检查逻辑:

// 假设$image是wp_get_attachment_metadata()返回的数组,$image_size是目标尺寸
$image_lazy = '';

if ($image_size == 'thumbnail') {
    // 检查thumbnail尺寸是否存在
    if (isset($image['sizes']['thumbnail'])) {
        $image_src = $image['sizes']['thumbnail']['url'];
        $image_lazy = $image_src;
    } else {
        // 尺寸不存在,用原始图片
        $image_lazy = $image['url'];
    }
} elseif ($image_size == 'medium') {
    // 检查medium尺寸是否存在
    if (isset($image['sizes']['medium'])) {
        $image_src = $image['sizes']['medium']['url'];
        $image_lazy = $image_src;
    } else {
        $image_lazy = $image['url'];
    }
} else {
    // 默认使用原始尺寸
    $image_lazy = $image['url'];
}

这段代码的核心逻辑是:每次切换尺寸时,先确认该尺寸是否被生成过(通过isset($image['sizes'][$size])),如果没有就直接回退到原始图片,避免出现无效的图片URL。


内容的提问来源于stack exchange,提问作者harry

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 10:37:31