WordPress 禁用图片自动裁剪

1. 说明

WordPress偶尔在不登陆的情况下会丢图片

  • 检查图片链接发现访问的是 image-18-1536×575.png
  • 而有资源的图片是 image-18.png

如果由于一些特殊原因可能把缩略图删了,或者就是不希望 WordPress 自动生成缩略图,也不希望别人访问的时候给图片自动追加类似 -1536×575 这样的后缀(希望所有人直接访问原图)。

2. 禁用缩略图生成

可以现在设置-媒体中,将各种尺寸参数都设置为0。

但是依旧没有效果,因为 WordPress会固定再裁剪两个尺寸。

对于额外的两个尺寸,则需要修改 functions.php 文件(通常位于 wp-content/themes/主题名称/functions.php),在末尾添加

add_filter('intermediate_image_sizes_advanced', 'filter_image_sizes');
function filter_image_sizes($sizes) {
    if (isset($sizes['medium_large'])) {
        unset($sizes['medium_large']);
    }
    if (isset($sizes['1536x1536'])) {
        unset($sizes['1536x1536']);
    }
    if (isset($sizes['2048x2048'])) {
        unset($sizes['2048x2048']);
    }
    return $sizes;
}
add_filter('big_image_size_threshold', '__return_false');

添加后,新上传的文件发现不再会被裁剪。

3. 老图处理

经过上面步骤,新上传的文件发现不再会被裁剪。但是老的图片依旧有问题。

这是由于老的图片的属性没有改变,依旧记录了缩略图信息。图片信息可能如下:

array(
    'width' => 1024,
    'height' => 768,
    'file' => '2023/10/image.jpg',
    'sizes' => array(
        'thumbnail' => array(
            'file' => 'image-150x150.jpg',
            'width' => 150,
            'height' => 150,
            'mime-type' => 'image/jpeg'
        ),
        'medium' => array(
            'file' => 'image-300x225.jpg',
            'width' => 300,
            'height' => 225,
            'mime-type' => 'image/jpeg'
        ),
        'medium_large' => array(
            'file' => 'image-768x576.jpg',
            'width' => 768,
            'height' => 576,
            'mime-type' => 'image/jpeg'
        ),
        // 其他裁剪尺寸...
    ),
    'image_meta' => array(
        // 其他元数据,如拍摄信息
    )
)

此时则需要批量处理老图,让老图根据新的配置不再生成缩略图

可以使用插件 Force Regenerate Thumbnails 批量更新

4. OSS或者图片不在本地的情况

如果使用了阿里云OSS或者其他方式,让图片保存在其他地方。用Force Regenerate Thumbnails则会失败。

仅需要暂时把图片导回到本地,执行完 Regenerate 再删除即可

5. 新图覆盖老图的情况

搞完上面操作后,个人浏览已经没问题了,都是原图,不过在编辑时出了问题,新的图会覆盖老的图。

没完全搞懂为什么图片命名没有像以前那样不断递增。

不过修改了一下图片的命名规则,改为时间+随机数,使文件不重名就能解决

发表评论