WordPress 禁用图片自动裁剪

1. 说明

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

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

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

2. 禁用缩略图生成

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

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

2.1 修改 functions.php

对于额外的两个尺寸,则需要修改 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');

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

2.2 自定义插件

修改 functions.php 有坏处就是当主题切换或者更新后,问题又会出现

自定插件则没有这个问题。

Step 1 : 先在 wp-content/plugins/ 下创建一个文件夹

比如

wp-content/
└── plugins/
    └── my-custom-snippets/
        └── my-custom-snippets.php

Step 2 : 写插件主文件 my-custom-snippets.php

<?php
/*
Plugin Name: My Custom Snippets
Description: Site-specific tweaks (e.g. disable medium_large image size).
Version: 1.0
Author: PP
License: GPL-2.0+
*/

// ======================
// ① 禁用所有中间size的图
// ======================
// add_filter( 'intermediate_image_sizes', function( $sizes ) {
//     return array_diff( $sizes, [ 'medium_large' ] );   // 移除 768px 这档
// } );


// 如果想一次性把所有中间尺寸都砍掉,
// 用下面这一行替换上面的 add_filter() 即可:
// add_filter( 'intermediate_image_sizes', '__return_empty_array' );
add_filter( 'intermediate_image_sizes', '__return_empty_array' );
// ======================
// ②(可选)关闭 WP ≥5.3 的大图自动缩放
// ======================
// add_filter( 'big_image_size_threshold', '__return_false' );

Step 3 : 进后台 → 插件 → 已安装插件

你会看到 “My Custom Snippets” 出现在列表里。

“启用” 即可生效。

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. 新图覆盖老图的情况

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

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

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

发表评论