【批量删除所有文章某区间内容】
例:某mysql数据内有几十万条数据,删除所有
<p class="txt">***</p>
内的内容,***的内容不同。也就是区间泛删除。
【MySQL 8.1以上才支持】
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(
post_content,
'<p class="txt">.*?</p>',
'',
'gis'
)
WHERE post_content REGEXP '<p class="txt">.*?</p>';
【MySQL 8.0支持】
UPDATE wp_posts
SET post_content = REGEXP_REPLACE(post_content, '<p class="txt">[^<]*</p>', '')
WHERE post_content REGEXP '<p class="txt">[^<]*</p>';
你可以放一个临时 PHP 文件到 WordPress 根目录,运行一次,运行前请 备份数据库。修改完立即删除此 PHP 文件,避免被人恶意利用。
<?php
require_once('wp-load.php');
global $wpdb;
// 查询所有包含 <p class="txt"> 的文章
$posts = $wpdb->get_results("
SELECT ID, post_content FROM {$wpdb->prefix}posts
WHERE post_content LIKE '%<p class=\"txt\">%'
");
foreach ($posts as $post) {
$old_content = $post->post_content;
// 删除所有 <p class="txt">...</p> 结构
$new_content = preg_replace('/<p class="txt">.*?<\/p>/s', '', $old_content);
// 更新数据库
if ($new_content !== $old_content) {
$wpdb->update(
"{$wpdb->prefix}posts",
['post_content' => $new_content],
['ID' => $post->ID]
);
echo "Updated post ID {$post->ID}<br>";
}
}
echo "清理完毕。";