WordPress网站免插件实现上传图片自动转为WebP格式

WordPress网站免插件实现上传图片自动转为WebP格式

20260223142916995-QQ_1771828130187

 

用一段php代码,免插件的方式,实现图片上传WordPress网站,自动将JPEG、PNG转换为WebP格式图片。大大提高网站文章编辑的效率。之前我在写文章的时候,上传图片到网站的流程是先手动把本地的图片到一些站点,比如Squoosh、TinyPNG,进行WebP格式转化压缩,之后再手动上传到网站。这个过程实际上非常耗时,且机械重复没什么技术含量。一直想着有什么方法可以上传图片到网站的过程中自动就把这些活干了,省时省力。以前也尝试过一些插件,要么免费额度太少,要么过多的插件影响网站速度。

为什么要使用WebP格式的图片

WebP格式图片是由 Google 推出的一种现代图像格式,用来替代传统的图像格式如 JPEG(JPG)、PNG、等。

相比 JPEG(JPG)、PNG,WebP 通常可以提供更小的文件大小,同时保持相似或更好的图像质量。

比JPEG节省25%-34%文件大小,比PNG减少26%以上体积。较小的图片体积让网页加载更快,能够提高用户体验。快速加载的网页对 SEO(搜索引擎优化) 更好,提升网站在 Google、百度 等搜索引擎中的排名。

代码功能

  • 将上传的 JPEG(JPG)、PNG 格式图片自动转换成 WEBP 格式,
  • 可选功能一:删除原图片
  • 可选功能二:禁止生成其他尺寸的缩略图

代码教程

子比主题将下方代码加入/wp-content/themes/zibll/functions.php文件或者func.php文件中(两个文件性质一样,只是 func.php 子比主题更新不会被覆盖掉,也就不需要再次修改),注意加在 <?php 的后面

其他注意也是一样

/**
 * WordPress自动将上传图片转换为WebP格式,同时删除原文件
 * 图像质量默认为80%,可根据需要调整
 */
 add_filter('wp_handle_upload', 'auto_convert_to_webp');
function auto_convert_to_webp($upload) {
    // 检查是否为支持的图片格式
    if (in_array($upload['type'], ['image/jpeg', 'image/png'])) {
        $file_path = $upload['file'];
        $quality = 80; // 可调整质量参数,建议70-90%

        // 检查服务器是否支持图像处理
        if (extension_loaded('imagick') || extension_loaded('gd')) {
            $image_editor = wp_get_image_editor($file_path);
            
            if (!is_wp_error($image_editor)) {
                // 生成WebP文件路径
                $webp_path = preg_replace('/\.[^.]+$/', '.webp', $file_path);
                
                // 保存为WebP格式
                $image_editor->save($webp_path, 'image/webp');
                
                // 更新上传信息指向WebP文件
                $upload['file'] = $webp_path;
                $upload['type'] = 'image/webp';
                $upload['url'] = preg_replace('/\.[^.]+$/', '.webp', $upload['url']);
                
                // 删除原始文件(可选)
                 @unlink($file_path);
            }
        }
    }
    return $upload;
}

//禁止生成缩略图(不需要将下面的全部删除)
function luesuotu( $sizes ){
  unset( $sizes[ 'thumbnail' ]);
  unset( $sizes[ 'medium' ]);
  unset( $sizes[ 'medium_large' ] );
  unset( $sizes[ 'large' ]);
  unset( $sizes[ 'full' ] );
  unset( $sizes['1536x1536'] );
  unset( $sizes['2048x2048'] );
  return $sizes;
}
 
add_filter( 'intermediate_image_sizes_advanced', 'luesuotu' );
© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容