主流浏览器也支持浏览器支持WebP此外,像微信公众号这样的大平台已经开始使用了WebP因此,没有理由不用博客插图代替图片WebP了。
默认情况下,WordPress不支持上传WebP格式图片,主题图片functions.php添加以下代码:
function bzg_filter_mime_types( $array ) {$array['webp'] = 'image/webp';return $array; }add_filter( 'mime_types', 'bzg_filter_mime_types', 10, 1 );
虽然现在可以上传了WebP格式图片,但媒体列表中没有缩略图,因为WordPress在用wp_generate_attachment_metadata()使用函数生成图片数据时file_is_displayable_image()函数判断文件是否为图片,判断WebP图片结果是否为,因此,保存图片数据的操作中断。
解决是解决方案functions.php添加以下代码:
function bzg_file_is_displayable_image($result, $path) {$info = @getimagesize( $path );if($info['mime'] == 'image/webp') {$result = true;}return $result;}add_filter( 'file_is_displayable_image', 'bzg_file_is_displayable_image', 10, 2 );
之后上传WebP格式图片不会再有问题了,但之前上传的其他格式图片将被替换为WebP格式还是比较麻烦的,分享一下我的解决方案:
使用”Ubuntu下批量转换WebP格式图形工具”将wp-content/uploads目录中的图片全部转换为WebP假如你是,格式Windows系统,可搜索相应的转换工具;
编写一小段脚本,读取数据库中的所有图片,并使用它wp_update_attachment_metadata()函数更新这些图片的数据;
Gedit编辑器正则表达式替换wp_postmeta表中meta_key为_wp_attached_file图片名称可以在这个表中看到meta_key为_wp_attachment_metadata第二步替换了相应的数据;
Gedit编辑器正则表达式替换插入文章数据表中的图片链接;
因为我在处理时没有保存相应的脚本和正则表达式,所以你必须自己做丰衣足食。