每当我创建一个新网站时,我都会首先在“ stage.domain-name.com”之类的子域上创建一个临时站点。

一切正常后,我导出数据库,在notepad ++中打开它并执行查找/替换“ subdomain.domain-name.com”并将其替换为“ domain-name.com” ...最后,我将其导入到实时站点的新数据库中。

我的问题是...如果我只想使用phpmyadmin在整个数据库上执行此简单查找/替换操作,则需要运行什么SQL查询?

-CH

评论

如果您不熟悉查询,请尝试使用搜索和替换插件wordpress.org/extend/plugins/search-and-replace

为什么不使用WordPress功能来更新URL? codex.wordpress.org/Moving_WordPress详细介绍了所有内容

有一个插件。如果您愿意,它可以方便地使用后端,还可以替换后内容和其他字段中的URL:wordpress.org/plugins/better-search-replace

#1 楼

保存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。...如果实际上每个字段的整个数据库都存在查找/替换,那么这将解决问题。谢谢你的帮助

– NetConstructor.com
2011-1-25在11:28

查看我在答案中添加的新链接。我认为那是要走的路。

–费尔南多·布里安诺
2011年1月25日,11:29

这不适用于序列化数据。它可能会完全破坏某些主题配置。

–克里斯蒂安·莱斯库(Christian Lescuyer)
17-10-17在17:52

#2 楼

最好的选择,张贴,张贴内容和张贴元:

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出版。而且Search RegEx是一个很好的WP插件,可以通过所有帖子和页面进行搜索和替换为Grep。

2015年6月16日更新:使用下一句中链接的工具会更好,因为如上所述,在数据库转储中进行简单的查找/替换将破坏序列化的数据。请参阅interconnectit.com WordPress序列化的PHP搜索替换工具。这样,您就不会破坏序列化的数据,并且无需在帖子内容上运行RegEx,因为互连脚本会在各处更改URL。我一直使用该工具将网站迁移到不同的域,或者只是从http到https进行全局更改,以强制不使用插件的SSL并更改内容中的所有URL,以防止不安全的元素错误。

评论


永远不要更改GUID-即使转到新域。它用于唯一标识帖子,因为如果将帖子导出/导入到新数据库中,则ID可能会更改。一方面,RSS阅读器将使用GUID判断是否已阅读特定文章。更改GUID会有效地重新发布您的所有文章。

–泰勒·杜威
2012年6月16日17:42

@taylordewey说:“永远不要改变向导……”垃圾。

– markratledge
2012年6月17日18:55

@songdogtech Care解释为什么是垃圾?

–乳木果
2013年3月6日4:39



为什么必须更改GUID?

– kaiser
16年8月11日在16:36

这不适用于序列化数据。它可能会完全破坏某些主题配置。确实使用诸如互连/ IT之类的工具。

–克里斯蒂安·莱斯库(Christian Lescuyer)
17-10-17在17:52

#3 楼

这是我使用的出色的直接脚本,可与WP用于存储选项的序列化数组完美配合。完成操作后,只需确保将其从远程服务器中删除即可,因为它存在巨大的安全风险。

https://interconnectit.com/products/search-and-replace-for-wordpress-数据库/

评论


我不知道为什么我被-1。该脚本比SQL语句好得多。反馈好吗?

– lancemonotone
2011年8月3日14:10

那些不了解sql的人可以使用的工具,使那些用sql编写的人感到沮丧

–乔恩
13年6月23日在18:54

#4 楼

为此,我使用WP-CLI是因为我发现它最简单并且可以处理序列化数据。

wp search-replace 'http://example.dev' 'http://example.com' --skip-columns=guid

还有一个选项可以将您的更改写入SQL文件而不是操作实际的数据库:

wp search-replace foo bar --export=database.sql

评论


迄今为止最强大,最快的解决方案。 wp-cli再次节省了一天的时间

– ryanrain
18年6月19日在18:02

#5 楼

您不必执行此操作,可以使用相对路径。

,当您链接某些内容而不是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’);


评论


谢谢...是的,下次我会做。 SQL语句是否在整个数据库(包括所有表)上进行查找替换?

– NetConstructor.com
2011-1-25在12:03

@ NetConstructor.com mireille上面给您的SQL语句是用于替换特定表中特定字段中的字符串的通用MySQL命令。如果您尝试完全按照编写的方式运行此语句,那么它将无法正常工作。为了使此命令生效,您需要将TABLE_NAME和FIELD_NAME更改为WordPress使用的真实字段和表。

– Manzabar
2011-1-26的3:15

还要注意,即使您希望使用相对路径,wordpress的许多部分也倾向于自动插入完整路径。要使此插件真正正常工作,非常有用:wordpress.org/plugins/root-relative-urls

–benz001
2014-09-15 5:03



#6 楼

要更改我们经常需要的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');



如果需要,我们还必须添加其他非WP表默认的表。

更新:搜索替换数据库版本3.1.0是开发人员易于使用的前端工具,它使您可以进行数据库范围内的搜索/替换操作,不会损坏PHP序列化的字符串或对象。

评论


这不适用于序列化数据。它可能会完全破坏主题配置。

–克里斯蒂安·莱斯库(Christian Lescuyer)
17-10-17在17:50

#7 楼

实际上,您不必仅在主题中的wp_config和functions.php文件中进行一些调整即可使用SQL查询。在Wordpress Codex中查看此主题:
https://codex.wordpress.org/Changing_The_Site_URL

评论


这是不对的。不幸的是,WordPress将一些URL作为文本存储在数据库中。

– s_ha_dum
2015年9月30日14:03在