问题描述
媒体库的附件,已经全部转移到阿里云OSS中,并且清理了缩略图。然后就发现部分文章里的图片无法显示,错误是404,也就是不存在了。
问题原因
使用OSS插件清理了物理缩略图,部分文章中调用的图片地址仍然是之前的缩略图地址,类似下面这样的地址:
https://static.xxx.com/2018/11/195175606-300x300.jpg
解决方法
本来打算重新生成缩略图,可是图片太多了,不仅占用空间而且速度太慢。所以就打算在数据库中批量查找替换。郁闷的是数据库版本不支持正则替换,好在支持正则查找。曲线一下吧,正则查找以后,PHP替换,最后用WordPress的更新函数,把文章更新一下即可。示例代码如下:
require_once( dirname(__FILE__) . '/wp-load.php' );
global $wpdb;
$posts = $wpdb->get_Results( "SELECT ID,post_content FROM {$wpdb->prefix}posts WHERE post_type='post' AND post_content REGEXP '-[0-9]{2,3}x[0-9]{2,3}'", 'ARRAY_A' );
foreach ($posts as $post) {
$content = preg_replace( '/-d{2,3}xd{2,3}.(jpg|png|gif|jpeg)/', '.$1', $post['post_content'] );
$my_post = array(
'ID' => $post['ID'],
'post_content' => $content,
);
wp_update_post( $my_post );
}