我正在帮朋友,让他离开Blogger,进入托管的WordPress博客。
最大的问题是,有超过1,800个帖子,有很多图像链接需要处理。 WordPress没有自动导入这些的机制,所以我手动完成。
我已经使用wget下载了网站上链接/嵌入的每一张图片。现在,我需要一些帮助来构建MySQL查询,以将博客中的所有图像更改为新地址。
例如:
http://www.externaldomain.com/some/link/to/an/image.jpg
应该成为:
http://www.newbloghosting.com/wordpress/wp-content/uploads/legacy/www.externaldomain.com/some/link/to/an/image.jpg
所以条件是,如果post_content中的字符串以jpeg,jpg,gif或png结尾,则替换:
http://
与
http://www.newbloghosting.com/wordpress/wp-content/uploads/legacy/
我知道如何用
进行毯子替换UPDATE wp_posts SET post_content = replace(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com');
但是我很难弄清楚如何完成我更细致,有条件的方法。
感谢您提供的任何指导。 (在这里发布或者在ServerFault之间发生了撕裂,但是看起来它有很多MySQL专家,所以我在这里。)
答案 0 :(得分:5)
MySQL有很多字符串操作函数可供您插入查询的WHERE部分。
UPDATE wp_posts
SET post_content = REPLACE(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com')
WHERE RIGHT(post_content, 4) = 'jpeg'
OR RIGHT(post_content, 3) IN ('jpg', 'gif', 'png');
如果是我,我会再做两件事:将其转换为小写以匹配例如'.JPG',并在jpg,gif等之前匹配点:
WHERE LOWER(RIGHT(post_content, 5)) = '.jpeg'
OR LOWER(RIGHT(post_content, 4)) IN ('.jpg', '.gif', '.png');
答案 1 :(得分:2)
如果找到旧的子字符串,REPLACE将只执行更改 - 我没有看到问题。
REPLACE(post_content, 'http://www.old-domain.com', 'http://www.new-domain.com');
......会奏效。如果要限制对包含“jpeg”,“jpg”,“gif”和/或“png”的行的更新,请添加:
WHERE INSTR(post_content, 'jpeg') > 0
OR INSTR(post_content, 'jpg') > 0
OR INSTR(post_content, 'gif') > 0
OR INSTR(post_content, 'png') > 0
参考文献:
答案 2 :(得分:0)
如果一切都失败了,那么使用import feature呢?然后使用plugin来获取您的图片(检查插件帖子中的评论,因为有一些相关信息)。
答案 3 :(得分:-1)
我不认为它可以在一个简单的查询中完成,但使用简单的PHP脚本相对容易。只需在php中使用一个简单的循环来遍历内容的每一行,并在内容字段上执行preg_replace,然后更新该行。
它并不像在sql中那样优雅,但它肯定会在今天完成工作,因为今年某个时候已经完成。
P.S。这假设内容不仅仅是网址,在这种情况下,正常mysql string functions就足够了。