【批量删除所有文章某区间内容】
例:某mysql数据内有几十万条数据,删除所有
1 |
<p class="txt">***</p> |
内的内容,***的内容不同。也就是区间泛删除。
【MySQL 8.1以上才支持】
1 2 3 4 5 6 7 8 |
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支持】
1 2 3 |
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 文件,避免被人恶意利用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
<?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 "清理完毕。"; |