使用数据库SQL查询(最快最直接)
UPDATE wp_posts
SET post_content = REPLACE(
post_content,
'<h2>从小站云盘下载</h2>
<p class="ky-center"><a href="',
'<h2>从小站云盘下载</h2>
<p class="center"><a href="'
);
UPDATE wp_posts
SET post_content = REPLACE(
post_content,
'" target="_blank" rel="nofollow noopener">下载地址</a><br>按编号选择进入<a href="',
'"><span class="biankuang">从小站云盘下载</span></a></p>
<p class="center"><a href="'
);
UPDATE wp_posts
SET post_content = REPLACE(
post_content,
'" target="_blank" rel="nofollow noopener">下载入口</a><br>
<span style="text-align: center; height: 38px; color: rgb(75, 218, 210) ;">如果本资源侵犯到您的权益请联系我们删除</span><br>
<span style="text-align: center; height: 38px; color: rgb(183, 183, 183) ;">联系方式QQ邮箱:6167555@qq.com</span></div>',
'" target="_blank" rel="nofollow noopener"><span class="ky-biankuang">按编号查找下载</span></a></p>
<h2>从百度网盘下载</h2>'
);
操作前务必:
- 备份数据库
- 在测试环境先验证
建议添加WHERE条件
为了安全,建议每条都加上WHERE条件:
sql
UPDATE wp_posts
SET post_content = REPLACE(...)
WHERE post_content LIKE '%本资源下载请点击%';
WHERE条件的核心作用
不加WHERE:
- 扫描所有文章
- 对每篇文章执行REPLACE操作
- 即使文章不包含目标内容也要扫描一遍
加WHERE:
- 只扫描包含特定特征的文章
- 只对这些文章执行REPLACE操作
- 其他文章完全跳过,不浪费资源
使用PHP脚本的正则表达式方法
在WordPress网站的根目录(与wp-config.php同一目录)创建一个新文件,比如命名为exact_match_replace.php
vim exact_match_replace.php
<?php
/**
* 终极批量替换脚本 - 经过实践验证的最佳版本
* 特点:精确匹配、安全可靠、进度清晰、支持续传
*/
define('DONOTCACHEPAGE', true);
error_reporting(0);
ini_set('max_execution_time', 0);
ini_set('memory_limit', '512M');
require_once('./wp-load.php');
global $wpdb;
echo "🎯 终极批量替换脚本\n";
echo "==================\n";
$config = array(
'dry_run' => true, // true=测试模式, false=实际执行
'batch_size' => 100 // 每批处理数量
);
// ==================== 配置区域开始 ====================
// 修改这里的三个变量来适应不同的替换需求
// 1. 正则表达式模式(要查找的内容)
$exact_pattern = '#<div id="wpxz" style="height: 38px; "></div>\s*<div style="text-align: center;background-color: rgb\(238, 238, 238\);">本资源下载请点击<a href="([^"]*)" target="_blank" rel="nofollow noopener">下载地址</a><br>按编号选择进入<a href="([^"]*)" target="_blank" rel="nofollow noopener">下载入口</a><br>\s*<span style="text-align: center; height: 38px; color: rgb\(75, 218, 210\) ;">如果本资源侵犯到您的权益请联系我们删除</span><br>\s*<span style="text-align: center; height: 38px; color: rgb\(183, 183, 183\) ;">联系方式QQ邮箱:6167555@qq.com</span></div>#';
// 2. 替换模板(要替换成的内容)
$replace_template = '<h2>从小站云盘下载</h2>
<p class="ky-center"><a href="$1" target="_blank" rel="nofollow noopener"><span class="ky-biankuang">从小站云盘下载</span></a></p>
<p class="ky-center"><a href="$2" target="_blank" rel="nofollow noopener"><span class="ky-biankuang">按编号查找下载</span></a></p>
<h2>从百度网盘下载</h2>';
// 3. SQL查找条件(精确查找要替换的文章)
$where_sql = "post_type = 'post'
AND post_status = 'publish'
AND post_content LIKE '%<div id=\"wpxz\" style=\"height: 38px; \"></div>%'
AND post_content LIKE '%本资源下载请点击%'
AND post_content LIKE '%下载地址%'
AND post_content LIKE '%按编号选择进入%'
AND post_content LIKE '%下载入口%'
AND post_content LIKE '%如果本资源侵犯到您的权益请联系我们删除%'
AND post_content LIKE '%联系方式QQ邮箱:6167555@qq.com%'";
// ==================== 配置区域结束 ====================
echo "🔧 配置信息:\n";
echo " 模式: " . ($config['dry_run'] ? "测试模式" : "实际执行") . "\n";
echo " 批次大小: {$config['batch_size']} 篇\n\n";
// 统计总数
$total_posts = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} WHERE {$where_sql}");
echo "📊 找到 {$total_posts} 篇匹配的文章\n";
if ($total_posts == 0) {
echo "❌ 没有找到匹配的文章\n";
exit;
}
// 检查是否已经部分替换
$replaced_count = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} WHERE {$where_sql} AND post_content LIKE '%<h2>从小站云盘下载</h2>%'");
if ($replaced_count > 0) {
echo "💡 已有 {$replaced_count} 篇文章被替换过\n";
}
$processed = 0;
$updated = 0;
$offset = 0;
echo "\n🎯 开始处理...\n";
echo str_repeat("-", 60) . "\n";
while (true) {
$posts = $wpdb->get_results($wpdb->prepare(
"SELECT ID, post_title, post_content FROM {$wpdb->posts} WHERE {$where_sql} ORDER BY ID LIMIT %d, %d",
$offset, $config['batch_size']
));
if (empty($posts)) break;
foreach ($posts as $post) {
$processed++;
// 跳过已替换的文章(支持续传)
if (strpos($post->post_content, '<h2>从小站云盘下载</h2>') !== false) {
continue;
}
$original_content = $post->post_content;
if (preg_match($exact_pattern, $original_content, $matches)) {
$new_content = preg_replace($exact_pattern, $replace_template, $original_content);
if (!$config['dry_run']) {
$result = $wpdb->update(
$wpdb->posts,
array('post_content' => $new_content),
array('ID' => $post->ID)
);
if ($result !== false) {
$updated++;
if ($processed % 50 == 0) {
echo "✅ 已更新: {$post->post_title} (ID: {$post->ID})\n";
}
}
} else {
$updated++;
if ($processed % 50 == 0) {
echo "✅ 匹配: {$post->post_title} (ID: {$post->ID}) - 测试模式\n";
}
}
}
// 显示进度
if ($processed % 100 == 0) {
echo "进度: {$processed}/{$total_posts}\n";
}
}
$offset += $config['batch_size'];
// 批次间短暂暂停
usleep(50000);
}
echo "\n" . str_repeat("=", 60) . "\n";
echo "🎉 处理完成!\n";
echo "总匹配文章: {$total_posts} 篇\n";
echo "已处理: {$processed} 篇\n";
echo "成功匹配: {$updated} 篇\n";
echo "模式: " . ($config['dry_run'] ? "测试模式" : "实际执行") . "\n";
if ($config['dry_run']) {
echo "\n💡 要实际执行请设置 'dry_run' => false\n";
} else {
echo "\n✅ 实际替换已完成!\n";
}
// 最终统计
echo "\n📊 最终统计:\n";
$final_replaced = $wpdb->get_var("SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_content LIKE '%<h2>从小站云盘下载</h2>%'");
echo "总已替换文章: {$final_replaced} 篇\n";
echo "============================================\n";
?>
如果测试成功,修改配置后实际执行:
$config = array(
'dry_run' => false, // 实际执行
'limit' => 0, // 无限制
);
「点点赞赏,手留余香」
声明:本文为原创文章,版权归旷野小站所有,欢迎分享本文,转载请保留出处!