每当我创建一个新网站时,我都会首先在诸如“ stage.domain-name.com”之类的子域上创建一个临时站点。
一切正常后,我导出数据库,在notepad ++中打开它,并查找/替换“ subdomain.domain-name.com”,然后将其替换为“ domain-name.com” ...最后,我将其导入到新数据库中实时站点的数据库。
我的问题是...如果我只想使用phpmyadmin在整个数据库上执行此简单查找/替换操作,则需要运行什么SQL查询?
-CH
每当我创建一个新网站时,我都会首先在诸如“ stage.domain-name.com”之类的子域上创建一个临时站点。
一切正常后,我导出数据库,在notepad ++中打开它,并查找/替换“ subdomain.domain-name.com”,然后将其替换为“ domain-name.com” ...最后,我将其导入到新数据库中实时站点的数据库。
我的问题是...如果我只想使用phpmyadmin在整个数据库上执行此简单查找/替换操作,则需要运行什么SQL查询?
-CH
Answers:
保存URL的表是wp_options。您应该在使用您网站网址的列上进行更新:
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "siteurl"
UPDATE TABLE wp_options SET option_value = "new domain" WHERE option_name = "home"
我可能会缺少一些值,但是每当您再次执行此查找/替换过程时,您都会注意到应该更新的值和表并将它们添加到此脚本中。
WordPress Codex提供了有关如何更改网站URL的不错指南,也许对您来说更方便:更改网站URL
最好执行选项,发布,发布内容和发布meta:
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl';
UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
另请参阅使用phpMyAdmin和MySQL搜索数据| Packt出版。而搜索正则表达式是一个很好的WP插件可以搜索,并通过所有的文章和网页使用grep代替。
2015年6月16日更新:使用下句话中链接的工具要好得多,因为在数据库转储中进行上述简单的查找/替换会破坏序列化的数据。请参阅interconnectit.com WordPress序列化的PHP搜索替换工具。这样,您就不会破坏序列化的数据,也不需要在帖子内容上运行RegEx,因为互连脚本会在各处更改URL。我一直在使用该工具将网站迁移到不同的域,或者只是从http到https进行全局更改,以强制不使用插件的SSL,并更改内容中的所有URL以防止不安全的元素错误。
这是我使用的出色的直接脚本,可与WP用于存储选项的序列化数组完美配合。完成操作后,只需确保将其从远程服务器中删除即可,因为它存在巨大的安全风险。
https://interconnectit.com/products/search-and-replace-for-wordpress-databases/
为此,我使用WP-CLI,因为我发现它最简单,并且可以处理序列化数据。
wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid
还有一个选项可将您的更改写入SQL文件,而不是操作实际的数据库:
wp search-replace foo bar --export=database.sql
您不必这样做,可以使用相对路径。
当您链接内容而不是subdomain.soemthing.com/image.jpg时-例如使用/image.jpg
这样,您将不会首先面对问题。
否则,对于mysql更新语句,您可以使用
update TABLE_NAME set FIELD_NAME = replace(FIELD_NAME, ‘find this string’, ‘replace found string with this string’);
要更改我们经常需要的wordpress域,可能是使站点从localhost运行:这是更新查询的完整列表:
UPDATE wp_posts SET guid = replace(guid, 'http://olddomain.com','http://newdomain.com');
UPDATE wp_posts SET post_content = replace(post_content, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_url = replace(link_url, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_links SET link_image = replace(link_image, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_postmeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
UPDATE wp_usermeta SET meta_value = replace(meta_value, 'http://olddomain.com', 'http://newdomain.com');
/*UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com') WHERE option_name = 'home' OR option_name = 'siteurl' OR option_name = 'widget_text' OR option_name = 'dashboard_widget_options';*/
UPDATE wp_options SET option_value = replace(option_value, 'http://olddomain.com', 'http://newdomain.com');
更新: 搜索替换数据库版本3.1.0是面向开发人员的用户友好的前端工具,使您可以执行数据库范围的搜索/替换操作,而不会损坏PHP序列化的字符串或对象。
实际上,您不必仅在主题中的wp_config和functions.php文件中进行一些调整即可使用SQL查询。在Wordpress Codex中查看此主题:https : //codex.wordpress.org/Changing_The_Site_URL