为生成的缩略图设置自定义名称


9

是否有任何过滤器可用于设置这些自动生成的缩略图的命名约定?

像这样:

  • thumbnail_150x150.jpg-> thumbnail-s.jpg
  • thumbnail_300x300.jpg-> thumbnail-m.jpg
  • thumbnail_600x600.jpg-> thumbnail-l.jpg

Answers:


4

似乎答案是否定的 ...

我遵循了核心功能,发现死路一条。并找到了这篇文章(如何从顶部裁剪add_image_size()?),Rarst说:

中间图像生成极其严格。Image_resize()使它接近代码,并且完全没有钩子。

但是,根据其他答案的答案(来自bradt)和他发布的代码(WordPress中的Image Crop Position),我想我明白了:)

在函数中bt_generate_attachment_metadata,我刚刚修改了调用以bt_image_make_intermediate_size包括最后一个参数$size

$resized = bt_image_make_intermediate_size( $file, $size_data['width'], $size_data['height'], $size_data['crop'], $size );

并修改了函数的开头,bt_image_make_intermediate_size如下所示:

  • $size参数添加到函数
  • 而不是默认null$suffix,这switch是我们新后缀的
function bt_image_make_intermediate_size( $file, $width, $height, $crop = false, $size ) {
    if ( $width || $height ) {
        switch($size) {
            case 'thumbnail':
                $suffix = 't';
                break;
            case 'medium':
                $suffix = 'm';
                break;
            case 'large':
                $suffix = 'l';
                break;
            default:
                $suffix = null;
                break;
        }
        $resized_file = bt_image_resize( $file, $width, $height, $crop, $suffix, null, 90 );

在这里,我的mod的完整代码的副本,仅供参考。
diff相比原来的

很可能,所有代码都可以精简,但是通过这种方式,我们获得了自定义裁剪图像的好处:))


1
对不起,还在旅行。我会尽快对其进行测试,并告知您。谢谢。
肖恩·李

这个答案仍然有效吗?已经好几年了,所以
Athoxx '16

2

您可以使用过滤器image_make_intermediate_size,但是您必须根据获得的$ filename来确定要将中间文件更改为哪个名称(然后重命名该文件,因为此时已经生成了该文件)。

我只为“缩略图”生成一个中间尺寸的图像,所以就这么简单:

add_filter( 'image_make_intermediate_size', function( $filename ) {

    // old 2017_234783843-100x100.jpg
    $old = $filename;
    // new 2017_234783843-thumbnail.jpg
    $new = preg_replace("/(\d+_\d+)-\d+x\d+\.(.*)/i", "$1-thumbnail.$2", $old );

    rename($old, $new);

    return $new;
} );

1
regex可能不太具体"/(.*)-\d+x\d+\.(.*)/i"
注意
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.