如何使用SQL批量删除WordPress文章中指定的su系列短代码?
解决方案
你执行的SQL未生效的核心原因是目标短代码在数据库中存储时,两个短代码之间存在换行符、多余空格,你写的匹配字符串直接拼接了两个短代码,没有包含中间的空白字符,无法命中实际存储的内容。可按以下方案操作,执行所有SQL前请先备份wp_posts表,避免数据丢失;如果你修改过WordPress默认表前缀,将语句中的wp_posts替换为实际的文章表名。
方案1:分开替换两个短代码(最稳妥)
无需考虑两个短代码的位置、间隔关系,分别执行两条替换语句即可:
-- 替换空的su_quote短代码 UPDATE wp_posts SET post_content = REPLACE(post_content, '[su_quote][/su_quote]', ''); -- 替换指定参数的su_divider短代码 UPDATE wp_posts SET post_content = REPLACE(post_content, '[su_divider top="no" style="dotted" divider_color="#c9c9c9"]', '');
如果执行后仍无匹配,可检查数据库中存储的短代码是否存在参数顺序变化、多余空格、引号类型不同的情况,调整匹配字符串后重新执行即可。
方案2:匹配连续出现的短代码(适配中间有换行的场景)
如果你仅需要删除连续出现的这两个短代码,可在匹配字符串中加入换行符:
-- 适配Linux换行符 UPDATE wp_posts SET post_content = REPLACE(post_content, '[su_quote][/su_quote]\n[su_divider top="no" style="dotted" divider_color="#c9c9c9"]', ''); -- 如果上面的语句未生效,尝试适配Windows换行符 UPDATE wp_posts SET post_content = REPLACE(post_content, '[su_quote][/su_quote]\r\n[su_divider top="no" style="dotted" divider_color="#c9c9c9"]', '');
方案3:正则模糊匹配(适配短代码参数不固定的场景,仅MySQL 8.0+支持)
如果无法确定su_divider的参数是否完全一致,可使用正则替换匹配所有符合规则的短代码:
-- 替换所有空su_quote短代码 UPDATE wp_posts SET post_content = REGEXP_REPLACE(post_content, '\\[su_quote\\]\\[/su_quote\\]', ''); -- 替换所有su_divider短代码,忽略参数差异 UPDATE wp_posts SET post_content = REGEXP_REPLACE(post_content, '\\[su_divider[^\\]]*\\]', '');
内容的提问来源于stack exchange,提问作者didi
相关产品推荐
相关产品推荐

