WordPress上传图片是否需要重命名(附代码)

在上传图片时,许多人会考虑对文件名进行重命名。无论是为了SEO优化,还是为了更方便地进行管理,这都是一个常见的做法。我们从一个基础的图片上传重命名逻辑开始,逐步讨论了更复杂的情况以及重命名是否真的有意义。

初始需求

首先,假设我们有以下场景:在上传图片时,希望根据上传时间戳重命名所有的图片文件,以确保每个文件名唯一。代码如下:

function git_upload_filter($file) {
    // 检查文件是否为图片类型
    $image_mime_types = array('image/jpeg', 'image/png', 'image/gif', 'image/bmp', 'image/webp');
    if (in_array($file['type'], $image_mime_types)) {
        // 如果是图片,按时间重命名
        $time = date("YmdHis");
        $file['name'] = $time . "_" . mt_rand(1, 100) . "." . pathinfo($file['name'], PATHINFO_EXTENSION);
    }
    return $file;
}
add_filter('wp_handle_upload_prefilter', 'git_upload_filter');

这段代码会根据当前时间戳为每张图片生成唯一的文件名。这样可以确保文件名不会冲突,但文件名本身没有任何实际意义。

更复杂的需求:判断文件名是否需要重命名

进一步的讨论中,出现了不同种类的图片上传场景。我们希望针对一些“无意义”的文件名进行重命名,而对“合理”的文件名保留原名。例如:

  1. MidJourney等AI生成的图片,其文件名包含随机编号、用户名和无意义的长字符串,如 12_username_A_cat_in_glasses_64f50acd-8bfe-4725-a647-4104a52b4806.png,希望去掉这些无意义部分,只保留图片的描述性部分。
  2. 剪切板粘贴的图片,其文件名类似 image_20240916_150938.png,虽然没有具体含义,但不需要强制重命名。

改进后的方案

function git_upload_filter($file) {
    // 检查文件是否为图片类型
    $image_mime_types = array('image/jpeg', 'image/png', 'image/gif', 'image/bmp', 'image/webp');
    
    if (in_array($file['type'], $image_mime_types)) {
        // 提取文件名和扩展名
        $filename = pathinfo($file['name'], PATHINFO_FILENAME);
        $extension = pathinfo($file['name'], PATHINFO_EXTENSION);
        
        // 处理通过MidJourney等生成的图片
        if (preg_match('/^d+_[a-zA-Z0-9]+_(.+?)_[a-zA-Z0-9-]+(_d+)?$/', $filename, $matches)) {
            // 提取并使用描述性部分作为新文件名
            $new_filename = $matches[1];
            $file['name'] = sanitize_file_name($new_filename) . '.' . $extension;
        }
        // 处理通过剪切板粘贴的图片,不重命名
        elseif (preg_match('/^image_d{8}_d{6}$/', $filename)) {
            // 保持原始文件名
            return $file;
        }
    }
    
    return $file;
}
add_filter('wp_handle_upload_prefilter', 'git_upload_filter');

我们决定对图片文件名进行处理,针对不同情况使用不同的处理方式:

  1. MidJourney生成的图片:去掉文件名中的无意义部分(如编号、用户名、随机字符串),保留描述性部分。
  2. 剪切板粘贴的图片:保留原始文件名,不做重命名。

讨论:文件名截断的问题

在实际上传过程中,我们发现图片的文件名会被截断。例如,文件名 A_white_and_orange_cat_wearing_glasses_is_sitting_at_the_consol_64f50acd-8bfe-4725-a647-4104a52b4806.png 被截断为 A_white_and_orange_cat_wearing_glasses_is_sitting_at_the.png。文件名的截断导致即使经过优化,图片的描述性信息仍然可能被损失,影响不大。因此,我们讨论得出结论,重命名与否的实际意义减弱了。

总结

通过此次讨论,我们了解到以下几点:

  1. 文件名的重命名 可以帮助优化管理和SEO,尤其是去除无意义的字符部分有助于提高文件名的可读性。
  2. 文件名的截断 会影响重命名的实际意义,如果文件名无法保留完整信息,SEO和管理上的好处可能会大打折扣。
  3. WordPress自带的重命名机制 已经可以处理文件名冲突,因此不需要为文件名重复额外处理。
  4. ALT文本和描述字段 对图片的SEO优化更重要,如果文件名被截断,应该把更多精力放在这些字段上。

总之,文件名重命名在某些特定场景下有其作用,但如果考虑文件名截断或其他实际影响,保留原始文件名或者简单处理可能会更省时省力。以下是最终的改进代码,可以根据不同需求进行进一步调整。

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注