批量处理wordpress历史文章行内代码两边无空格的问题

以前记录内容的时候,往往忘记了在行内代码的两头加上空格,显得很混乱,忍了很久实在看不下去,这次把它处理了,由于使用了 markdown 插件,需要处理 wp_posts 表的两个字段 post_contentpost_content_filtered

其中字段 post_content 是存储最终渲染到前端的 html 内容,而字段 post_content_filtered 存储的是 markdown 原始文本,下面分两个脚本分别处理他们。

处理字段 post_content

思路是需要将字段 post_content 中的 <code> 标签内的内容匹配处理,然后在两端加入空格,然后更新字段即可,需要注意的是:
1. 避免重复替换;
2. 避免两端已经存在空格的被再次替换;
3. 需要排除代码块也就是 <pre> 标签中的 <code>

以下是处理代码:

友情提示:使用脚本前,请一定备份数据库

import re
import mysql.connector

# 连接到MySQL数据库
# 请替换以下参数为你的数据库连接信息
config = {
    'user': 'username',
    'password': 'password',
    'host': 'localhost',
    'database': '数据库',
    'raise_on_warnings': True
}
conn = mysql.connector.connect(**config)
cursor = conn.cursor()

# 正则表达式匹配不包含在<pre>标签内的<code>标签及两端的空格
pattern = re.compile(r'(?<!<pre>)([ ]*<code>[^<]+</code>[ ]*)')

def replace_func(post_content):
    matchs = pattern.findall(post_content)
    done = []
    for match in matchs:
        if match not in done and not (match.startswith(' ') or match.endswith(' ')):
            print(match, '======')
            done.append(match)
            post_content = post_content.replace(match, ' ' + match + ' ')
    return post_content

# 执行查询,获取需要更新的记录
cursor.execute("SELECT ID, post_content FROM wp_posts WHERE post_content REGEXP '<code>([^<]+)</code>'")
posts_to_update = cursor.fetchall()

# 遍历记录,执行替换操作
for post_id, post_content in posts_to_update:
    print("==============================================", post_id)
    new_content = replace_func(post_content)
    # 更新记录
    cursor.execute("UPDATE wp_posts SET post_content = %s WHERE ID = %s", (new_content, post_id))

conn.commit()

cursor.close()
conn.close()

处理字段 post_content_filtered

行内代码存在于反引号 "`" 中,用正则匹配出来,跟上面的逻辑差不多,代码如下:

友情提示:使用脚本前,请一定备份数据库

import re
import mysql.connector

# 连接到MySQL数据库
# 请替换以下参数为你的数据库连接信息
config = {
    'user': 'username',
    'password': 'password',
    'host': 'localhost',
    'database': '数据库',
    'raise_on_warnings': True
}
conn = mysql.connector.connect(**config)
cursor = conn.cursor()

# 匹配包含`及中间内容,包括两端空格
pattern = re.compile(r'[ ]*`.*?`[ ]*')

def replace_func(post_content):
    matchs = pattern.findall(post_content)
    done = []
    for match in matchs:
        if '``' not in match and match not in done and not (match.startswith(' ') or match.endswith(' ')):
            print(match, '======')
            done.append(match)
            post_content = post_content.replace(match, ' ' + match + ' ')
    return post_content

# 执行查询,获取需要更新的记录
cursor.execute("SELECT ID, post_content_filtered FROM wp_posts WHERE post_content_filtered like '%`%'")
posts_to_update = cursor.fetchall()

# 遍历记录,执行替换操作
for post_id, post_content in posts_to_update:
    print("==============================================", post_id)
    new_content = replace_func(post_content)
    # 更新记录
    cursor.execute("UPDATE wp_posts SET post_content_filtered = %s WHERE ID = %s", (new_content, post_id))

conn.commit()

cursor.close()
conn.close()

标题:批量处理wordpress历史文章行内代码两边无空格的问题

原文链接:https://beltxman.com/4305.html

若无特殊说明本站内容为 行星带 原创,未经同意请勿转载。

发表评论

您的电子邮箱地址不会被公开。

Scroll to top