php - 如何使用 MySQL 搜索和替换修复 WordPress 中损坏的链接?

标签 php mysql wordpress

我的一个客户在他们的网站上使用了 Velvet Blues 更新 URL 插件 ( https://en-gb.wordpress.org/plugins/velvet-blues-update-urls/ ),并且破坏了几乎所有的链接...

现在链接看起来像:www.site.compost-name/ 而不是 www.site.com/post-name/

这是一个实时网站,因此我需要非常小心地修复它,以免让事情变得更糟。

所以我知道我需要某种正则表达式来检查网站网址,后跟字母或数字而不带 /

我可以通过运行如下查询来查看很多损坏的链接:SELECT * FROM wp_postmeta WHERE meta_value REGEXP 'site.com[0-9 a-z A-Z]'

通常在更新数据库中的某些内容时,我会运行如下查询:UPDATE wp_postmeta SET meta_value = Replace(meta_value,'http://www.oldurl','http://www.newurl') ;.

但是根据我的研究发现,MySQL 不支持一种 preg_replace 功能 ( How to do a regular expression replace in MySQL? )。

我猜一种方法可能是向 wp_content 添加过滤器并在将其加载到页面上之前对其进行修复,但这只能掩盖问题,并不一定能修复它。

我对此有点困惑,因为有数千个损坏的链接,因此搜索和替换查询的范围很大,可能会出错并可能使事情变得更糟,而且我的正则表达式知识有限。

最佳答案

为此,您可以使用 NOT LIKE 操作数。 例如,

UPDATE wp_postmeta 
SET meta_value=REPLACE(meta_value,'site.com','site.com/') 
WHERE meta_value LIKE '%site.com%' 
AND 
meta_value NOT LIKE '%site.com/%' 

当然,为了以防万一,您需要先运行 SELECT 查询并查看结果。因为这不是理想的方法,可能会导致一些罕见的问题。

关于php - 如何使用 MySQL 搜索和替换修复 WordPress 中损坏的链接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51221531/

相关文章:

php - 如何 “dynamize” Dockerfile/Docker Compose?

php - 检查提交值是否在数组中?

php - 当 mysql 到远程服务器时,LOAD DATA LOCAL INFILE 不起作用

mysql - 确定是 mysql 还是 percona 或 mariaDB

php - Laravel:如何动态创建和命名 View ?

css - 无法更改标题链接颜色

ie/firefox 和 Chrome 的某些宽度的 CSS 问题

使用 SSL 登录 php

eclipse - 如何使用 Eclipse 代码样式在 wordpress 中突出显示我的代码

php - Silverstripe TinyMCE 在负载均衡器后面崩溃。