可以连接到媒体库预览文件栏并使用自定义图像吗?

时间:2021-10-07 作者:liquidRock

我正在做的项目,我找不到一种简单的方法让WordPress创建我需要的缩略图大小,而不产生大量的浪费,也无法同时生成WebP版本,所以我禁用了缩略图,我上传了一个全尺寸的jpg或png,然后我手动生成我的WebP和其他尺寸,并将它们复制到上传的文件中。自定义PHP函数处理生成响应<picture>.

但是,我希望避免媒体库一直将全尺寸图像加载为缩略图,因为这是对带宽的浪费。我想指出一个小的WebP或JPG版本,它不在库中,但在uploads文件夹中,并让它加载该图像。文件名几乎相同,只是需要附加_width (宽度是一个数字)我可以用strtr 或者别的什么。

是否有办法使用函数和挂钩/过滤器访问媒体库文件列,以便更改缩略图的src路径?我还需要避免PDF, SVGTXT 文件上载和仅目标JPGPNG 文件。如果不可能,我将不得不生成一个自定义大小的缩略图。

enter image description here

1 个回复
最合适的回答,由SO网友:liquidRock 整理而成

在被指向正确的方向后,我设法解决了这个问题。就我而言,我过滤了wp_get_attachment_image_attributes 一次更改管理中附件的所有路径。

在我的例子中,我在所有图像文件上使用描述性后缀(即。_featured 等等),因此修改它们很容易使用strtr 我还使用它将扩展从jpg更改为webp。

现在,所有附件图像预览都以所需大小的正确格式加载到所需的文件中,并且适用于媒体库、特色图像和自定义字段。

add_filter( \'wp_get_attachment_image_attributes\', \'my_attachment_filter\', 10, 3 );
function my_attachment_filter($attr, $attachment, $size){
    if (is_admin()){
        if (array_key_exists( \'src\' , $attr)){
            $old_src = $attr[\'src\'];
            $new_src = strtr($old_src, array(\'_featured\' => \'_featured_eighth\', \'_portrait\' => \'_portrait_204\', \'_og.\' => \'_og_320.\', \'.jpg\' => \'.webp\'));
            $attr[\'src\'] = $new_src;
        }
    }
    return $attr;
}